8

セキュリティクラスの割り当てとして、__asm__("jmp 0xbffff994");コードで使用しようとしていますが、gdbで逆アセンブルすると、命令がに変更されjmp 0xc8047e2aます。特定のアドレスにジャンプする理由と方法はありますか?

4

5 に答える 5

27

おそらくそれは相対アドレスへのジャンプであり、リンカーまたはローダーがコードを移動したためです。アドレスを変数に入れてから、次のようにします。

jmp dword [var]

または代わりに:

push 0xbffff994
ret
于 2009-04-21T23:34:28.653 に答える
1

コンパイル時に正確なアドレスを特定するのは難しいですが、ラベルを使用してみましたか?jmpで使用するのがはるかに一般的です。

例:

start:
 jmp exit

exit:
 ret
于 2009-04-21T23:36:54.327 に答える
0

ダニエルは、ジャンプがプログラムしたものと同じではない理由を説明します。それはオブジェクトファイルとリンクと関係があります。

特定のアドレスにジャンプする場合は、デバッガーまたは逆アセンブラーを使用してジャンプにパッチを適用することをお勧めします。

于 2009-04-21T23:34:15.223 に答える
0

私のシステム(gccバージョン4.2.4、Ubuntu)では、これは分解(洞察)では問題ないように見えます。

int main()
{{
asm( "jmp 0xbffff994");
0を返します。
};       

解体の結果(洞察):

        0x8048344:lea 0x4(%esp)、%ecx
-0x8048348:および$ 0xfffffff0、%esp
-0x804834b:pushl -0x4(%ecx)
-0x804834e:プッシュ%ebp
-0x804834f:mov%esp、%ebp
-0x8048351:プッシュ%ecx
-0x8048352:jmp 0xbffff994
-0x8048357:mov $ 0x0、%eax
-0x804835c:ポップ%ecx
-0x804835d:ポップ%ebp
-0x804835e:lea -0x4(%ecx)、%esp
-0x8048361:ret
于 2009-04-21T23:35:43.113 に答える
0

1回限りの場合は、16進エディターを使用し、値を変更することをお勧めします。

于 2009-04-21T23:42:04.377 に答える