Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.141.162] |
|
Сообщ.
#1
,
|
|
|
Как сделать MOV относительно текущего адреса? К примеру:
(Адрес 000000С0h): MOV [000000CF], ESP то есть я запишу ESP по глобальному адресу 000000CF Можно как-нибудь вместо адреса указать смещение относительно текущего адреса? ну что то типа MOV [+10], ESP и ESP запишется по адресу 000000С0h + 10h? |
Сообщ.
#2
,
|
|
|
В 64-битном можно. В 32-х (и ранее) - нет.
|
Сообщ.
#3
,
|
|
|
Где-то видел подобный доступ к IP
call x x: pop esi mov [esi+10], byte ptr 12h Плюс к этому нужно менять атрибуты сегмента кода на writeable. |
Сообщ.
#4
,
|
|
|
Я просто думал, правильно задать адрес смещением а не точным адресом...
|
Сообщ.
#5
,
|
|
|
Цитата Федосеев Павел @ Адекватные антивирусы на такую ерунду реагировать не будут, т.к. это нередко используется во вполне безопасных прогах.но не уверен, что HIPS (поведенческий анализ антивируса) пропустит такое. Цитата Федосеев Павел @ Ну или сразу задать при создании проги. Если пишем в код, конечно.Плюс к этому нужно менять атрибуты сегмента кода на writeable. Цитата Rzonex @ Что значит "правильнее"?Я просто думал, правильно задать адрес смещением а не точным адресом... Когда пишем прогу, используем имена переменных. И линковщик уже сам подставляет туда абсолютные адреса (и, если надо, fixup'ы создаёт, но это для DLL актуально). А если это позиционно-независимый код, тогда как Павел написал (только esi по соглашению нужно сохранять, так что я бы другой регистр использовал – eax, edx, ecx, – но тут, опять же, всё от ситуации/задачи зависит). В 64-х битах можно указывать переменную, fasm по умолчанию использует относительную адресацию, NASM – абсолютную, но это исправляется либо директивой default rel (распространяется на весь последующий код, default abs – возврат к абсолютной), либо указанием rel непосредственно в инструкции, например, mov eax,[rel MyVar],al. И тогда вот такой код будет позиционно-независимым. mov al,0x90 ; nop mov [rel MyVar],al MyVar: ret |
Сообщ.
#6
,
|
|
|
Цитата Rzonex @ Как сделать MOV относительно текущего адреса? текущий адрес - это символ доллара $ например вписать NOP за 2 байта от себя можно так: mov [$+2],90h |
Сообщ.
#7
,
|
|
|
В общем, пока TC не конкретизирует:
• под какую ОС и разрядность он пишет, • позиционно-зависимый или независимый (перемещаемый) код ему нужен, • на какой ассемблере он пишет (желательно), подсказать верный рецепт будет затруднительно. |