Discussion:
32bit Asm.
(слишком старое сообщение для ответа)
Ivan Kuvshinov
2006-05-12 07:50:55 UTC
Permalink
Как записать такую вот комманду:
mov [eax], $ffffffff;

Мне сказали, что такие существуют:
C7 00 33 22 44 33 mov [eax], dword 0x33442233
C7 05 78 56 34 12 33 22 44 33 mov [0x12345678], dword 0x33442233
Hо ТМТ ругается и всё тут!
Serg Klimenko
2006-05-12 16:23:50 UTC
Permalink
Огромный привет тебе, Ivan!

Почитывая письмо от Ivan Kuvshinov к All, написанное
12 Май 06 где-то в 12:50, решил я и сам что-нибудь добавить к этому разговору:

IK> Как записать такую вот комманду:
IK> mov [eax], $ffffffff;

IK> Мне сказали, что такие существуют:
IK> C7 00 33 22 44 33 mov [eax], dword 0x33442233
IK> C7 05 78 56 34 12 33 22 44 33 mov [0x12345678], dword 0x33442233
IK> Hо ТМТ ругается и всё тут!

Опять же, именно про TMT не скажу, но в асме оно обычно пишется типа

mov dword ptr [eax],$ffffffff

Потому как можно написать

mov [eax],0 - и будет ассемблер гадать, сколько байт ему надо нулями забить -
1, 2 или 4. А есть ведь еще всякие там qword(?) и проч.

┌ Ваша линейка прослужит вам намного дольше,
│ если после каждого измерения ненадолго опускать ее в ящик письменного стола.
└─ С ув. тов. Serg Klimenko aka LiON. [Team Digital Photo]
Ivan Kuvshinov
2006-05-12 18:14:07 UTC
Permalink
SK> mov dword ptr [eax],$ffffffff
Спасибо прокатило (я-то пробовал вроде такого: mov [eax], dword fff;)

КИА
Ivan Kuvshinov
2006-05-13 13:12:23 UTC
Permalink
Hаписал такого рода процедурку:
label TST01,TST02;
procedure Test;
label NO_RUN;
begin
asm
jmp NO_RUN;
end;
goto TST01;
goto TST02;
asm
NO_RUN:
end;
end;

begin
TST01:;
TST02:;
end.

И решил посмотреть что там за код получиться с участка jmp NO_RUN. Вот такая
фигня:
jmp 00000050
mov ebp 00000000
mov esp dword ptr [ebp-04]
jmp fffff857
mov ebp 00000000
mov esp dword ptr [ebp-04]
jmp fffff857
00000050: pop edx
pop ecx
pop ebx
leave

Это зачем он так делает, эти mov?

КИА
Serg Klimenko
2006-05-13 18:45:51 UTC
Permalink
Огромный привет тебе, Ivan!

Почитывая письмо от Ivan Kuvshinov к All, написанное
13 Май 06 где-то в 18:12, решил я и сам что-нибудь добавить к этому разговору:

IK> Hаписал такого рода процедурку:
IK> label TST01,TST02;
IK> procedure Test;
IK> label NO_RUN;
IK> begin
IK> asm
IK> jmp NO_RUN;
IK> end;
IK> goto TST01;
IK> goto TST02;
IK> asm
IK> NO_RUN:
IK> end;
IK> end;

IK> begin
IK> TST01:;
IK> TST02:;
IK> end.

IK> И решил посмотреть что там за код получиться с участка jmp NO_RUN. Вот
IK> такая фигня: jmp 00000050 mov ebp 00000000 mov esp dword ptr [ebp-04]
IK> jmp fffff857 mov ebp 00000000 mov esp dword ptr [ebp-04] jmp fffff857
IK> 00000050: pop edx
IK> pop ecx
IK> pop ebx
IK> leave

Это же очевидно. Ты делаешь переход за пределы функции. Компилер за тебя
восстанавливает контекст, в том числе состояние стека.

┌ -Сначало было не слово, а пpедложение!
│ -"E-моe:, что ж я наделал то?!"
└─ С ув. тов. Serg Klimenko aka LiON. [Team Digital Photo]
Ivan Kuvshinov
2006-05-13 20:36:42 UTC
Permalink
IK>> jmp fffff857 mov ebp 00000000 mov esp dword ptr [ebp-04] jmp fffff857
IK>> 00000050: pop edx
SK> Это же очевидно. Ты делаешь переход за пределы функции. Компилер за тебя
SK> восстанавливает контекст, в том числе состояние стека.
Просто меня смутили ffff - это смещение назад что ли? Потому что адреса-то я
знал и они начинались где то на 828hex, так что мне показалось, что - всё
левак :-))))

КИА
Serg Klimenko
2006-05-14 05:45:56 UTC
Permalink
Огромный привет тебе, Ivan!

Почитывая письмо от Ivan Kuvshinov к Serg Klimenko, написанное
14 Май 06 где-то в 01:36, решил я и сам что-нибудь добавить к этому разговору:

IK>>> jmp fffff857 mov ebp 00000000 mov esp dword ptr [ebp-04] jmp
IK>>> fffff857 00000050: pop edx
SK>> Это же очевидно. Ты делаешь переход за пределы функции. Компилер
SK>> за тебя восстанавливает контекст, в том числе состояние стека.
IK> Просто меня смутили ffff - это смещение назад что ли? Потому что
IK> адреса-то я знал и они начинались где то на 828hex, так что мне
IK> показалось, что - всё левак :-))))

Процедура положена после основной части кода, посему переход назад и
получается. Тоже не вопрос.

┌ Ярче солнце светится и веселей пейзаж, когда в желудке плещется C2H5OH.
└─ С ув. тов. Serg Klimenko aka LiON. [Team Digital Photo]
Ivan Kuvshinov
2006-05-13 21:08:11 UTC
Permalink
IK>> jmp NO_RUN;
IK>> end;
IK>> goto TST01;
IK>> goto TST02;
IK>> asm
IK>> NO_RUN:
Вообще, хотелось просто снимать дамп не исполняя в коде вызов процедуры а
брать адрес из метки, но - TMT зараза, не даёт их использовать в асме,
приходиться выковыривать, что не есть хорошо.

КИА
Serg Klimenko
2006-05-14 05:46:38 UTC
Permalink
Огромный привет тебе, Ivan!

Почитывая письмо от Ivan Kuvshinov к Serg Klimenko, написанное
14 Май 06 где-то в 02:08, решил я и сам что-нибудь добавить к этому разговору:

IK>>> jmp NO_RUN;
IK>>> end;
IK>>> goto TST01;
IK>>> goto TST02;
IK>>> asm
IK>>> NO_RUN:
IK> Вообще, хотелось просто снимать дамп не исполняя в коде вызов
IK> процедуры а брать адрес из метки, но - TMT зараза, не даёт их
IK> использовать в асме,
IK> приходиться выковыривать, что не есть хорошо.

Hифига не понял. Зачем тебе это _в процессе выполнения программы_ ?
Генерируемый код проще другими способами посмотреть. А всякие извращения с
адресами исполняемого кода обычно как раз на уровне процедур и функций имеет
смысл применять. Да и то не всегда.

Это уж не говоря о том, что использование меток и операторов goto в языке
высокого уровня - дурной тон. :-)

┌ Папуас папуасу друг, товарищ и корм.
└─ С ув. тов. Serg Klimenko aka LiON. [Team Digital Photo]
Loading...