3

環境変数があり、そのメモリ アドレスを取得しようとしています。私は持っている

memset(&buffer, 0x90, 517);
memcpy(&buffer[517-strlen(shellcode)],shellcode,strlen(shellcode));
setenv("EGG",buffer,1);
putenv(buffer);
printf("EGG address: 0x%1x\n", getenv("EGG"));
system("bash");

印刷されたメモリ アドレスは0x804b00c. それは正しくないように見えました。GDB x/x で確認しました0x804b00c。のメモリにアクセスできませんと表示されました0x804b00cgetenv基本的にガベージメモリを与えています。変数が設定され envていることを確認するために呼び出しましたが、設定されていました。EGG

のメモリ アドレスを取得できないのはなぜEGGですか?

4

2 に答える 2

1

予備的な答えは、Endian ハードウェアがほとんどないということです。したがって、ワード (4 バイト、ワード境界で整列) は、ハーフワードとハーフワード内のバイト、SWAPPED と共に格納されます。0x0804b00c は、実際には 0x0cb04b80 にある可能性が高くなります。

あなたが望むことをするために私自身のCコードを書いてみて、2番目のメモを投稿します.

于 2013-07-29T23:31:56.603 に答える