プログラムのgdb逆アセンブルを見ていました
...
0x8048085: cmp eax,ecx
0x8048087: je 0x804809f
0x8048089: mov DWORD PTR [esp+0x4],0x21
0x8048091: mov DWORD PTR [esp],0x8048160
0x8048098: jmp 0x8048157
0x804809d: mov esi,0x115e8ba
0x80480a2: add BYTE PTR [eax],al
...
2 番目の命令では、後の 2 つの命令の間にあるアドレス 0x...9f へのジャンプがあります。実行するアドレスをプロセッサに提供する限り、プロセッサは気にする必要がないため、理論的にはすべてが可能であることを理解していますが、それでも...誰かが説明できたら、ありがとう
更新 : アドレスに問題があるようです。しかし、これはより大きなコード (200 行) の一部です。「call 0x...」と書かれている場所を見て、それらをラベルに置き換えたところ、コードは次のようになりました。
func1:
...
asm
...
call func2
...
ret
func2:
...
asm
...
ret
...
したがって、ある時点で逆アセンブリがアドレスで失敗したという事実を購入したいと思いますが、それはどこでもcall 0x ...、0x ...の前の命令であるという事実とは相関しません。 「レット」。アドレスのどこかにオフセットがある場合、これは当てはまりません