Я только недавно поцарапал поверхность языка ассемблера и отладки. У меня есть следующий код:
Address Hex dump Command Comments
006E3689 . E8 C5F9FFFF CALL 006E3053
->006E368E E9 DB E9
->006E368F 35 DB 35 ; CHAR '5'
->006E3690 80 DB 80
->006E3691 . 0000D490 DD 90D40000
006E3695 /> E8 72040000 CALL 006E3B0C
А дальше вниз...
Address Hex dump Command Comments
006EB6C8 /. 6A 58 PUSH 58
006EB6CA |. 68 A0372A00 PUSH 2A37A0
006EB6CF ^ E9 C17FFFFF JMP 006E3695
Теперь, прежде чем я скомпилировал коды, указанные ->, на самом деле все были включены в JMP 006EB6C8, который, конечно, просто перешел ко второму набору кода, добавил пару вещей и вернулся обратно наверх.
Теперь этот код все еще работает, но я не уверен, почему код изменился (используя Ollydbg) при компиляции, но что более важно (я считаю), это то, как код знает, что нужно прыгать и как далеко. Мои исследования до сих пор говорили мне, что E9 — это код операции для прыжка, но я не смог найти информацию о 35 и 80. Я предполагаю, что 0000D490 — это какое-то смещение, но я не могу найти никакой математики, которая суммируется. адрес 006EB6C8.
Надеюсь, что этот вопрос также хорошо сформулирован, я все еще новичок. Заранее спасибо!
udcli
. - person nrz   schedule 13.11.2014