最近この本を購入した:ハッキング:The Art of Exploitation(2nd Edition)これは最近非常に厄介なことでした。とにかく、例の一つ、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. }
それはあなたが(明らかに:3)のgccでコンパイルした、この私だけの使用gobjdumpのために(objdumpの使用、OSのためにobjdumpは見つけることができませんでしたX)grepへの出力をmain:でパイプします。正規表現として最初の20行を表示します。その後、gdbでデバッグし、mainでブレークします。 ここに私の主な問題があります:すべてのメモリアドレスが異なります! たとえば、本のeipは0x804837aです。しかし、私のコンピュータではリップがあります:0x100000ee8私はそれが64ビットOSを使用していると思っていましたが、32ビットバージョンのダーウィンで起動したときにも同じ結果が得られました。誰かがこの問題が何であるか知っていれば、私は大いに感謝しています。それが本当にばかげて何か休憩を与えるならば、私はちょうど14になった:
うわー!それはかなり甘いです、私はそれについて知りませんでした、ありがとう! – jaykru
gdbにASLRを無効にするオプションがありますが、私はまだ同じアドレスを持っていませんか? – jaykru
gdbを使ってASLRを無効にすることはできません。 http://stackoverflow.com/questions/6325537/disabling-aslr-in-mac-os-x-snow-leopardを参照してください。ASLRが無効になっている場合、書籍で使用されているOSのバージョンがあなたとは違う – JosephH