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