최근에이 책을 구입했습니다 : 해킹 : The Art of Exploitation (2nd Edition) 그리고 최근에 저를 괴롭 히고 있습니다. 어쨌든, 예제 중 하나, firstprog.c으로 :Wacker from Hacking : 착취 기술
#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에서 중단하십시오. 여기 내 주요 문제 : 모든 메모리 주소가 다릅니다! 예를 들어, 책의 전자 메일 주소는 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