0

私は最近この本を購入しました: Hacking: The Art of Exploitation (第 2 版)というタイトルで、最近とても悩まされています。とにかく、例の 1 つである firstprog.c :

#include <stdio.h>
int main() {
int i;
for(i=0; i < 10; i++) {
// Loop 10 times.
printf("Hello, world!\n"); // put the string to the output. }
return 0; // Tell OS the program exited without errors. }

gcc(明らかに :3 )でコンパイルしてから、objdumpを使用します(これには、gobjdumpを使用しただけで、OS Xのobjdumpが見つかりませんでした)出力をmain.:でgrepにパイプし、正規表現として最初の20を表示します行。次に、gdb でデバッグし、main で中断します。これが私の主な問題です。すべてのメモリアドレスが異なります!! たとえば、本の eip は0x804837aです。しかし、リップ付きの私のコンピューターでは: 0x100000ee8 64ビットOSを使用しているからだと思っていましたが、32ビットバージョンのDarwinで起動すると同じ結果が得られました. 誰かがこの問題が何であるかを知っていれば、私はそれを大いに感謝します. それが本当に愚かなことなら、私に休憩を与えてください、私はちょうど14歳になりました:)

4

2 に答える 2

3

リバース エンジニアリングを勉強していると思いますので、 ASLRとは何かについても調べる必要があります。これが、プログラムのオフセットが本のオフセットと異なる主な理由です。基本的に、プログラムがメモリ内のどこに配置されるかをランダム化するため、アドレスをシェルコードにハードコーディングするエクスプロイトを作成できません。これにより、エクスプロイトの作成が非常に難しくなります。

于 2011-11-13T05:05:05.310 に答える
2

あなたが受け取る住所は、ほとんどの場合、本に記載されている住所とは異なります。まったく、アドレスは同じシステムで実行するたびに変わる可能性があります。

于 2011-11-13T05:04:06.773 に答える