2012-10-24 2 views
3

나는 Hacking : The Art of Exploitation의 예제를 따르고 있으며 다른 결과를 얻고 있습니다.strcpy()가 최적화되는 것을 막을 수있는 방법은 무엇입니까

이 예에서 strcpy를() 함수와 같은 명령어로 컴파일 것으로 보인다 : 나는 도서관에 대한 호출을 제거하고 MOV의 시리즈로 대체 동일한 프로그램을 컴파일 할 때 반면

0x802384c5 <main+27>: call 0x80482C4 <[email protected]> 

지침 :

0x8048475 <main+25>: mov DWORD PTR [eax],0x6c6c6548 
0x804847b <main+31>: mov DWORD PTR [eax+0x4],0x6f57206f 
0x8048482 <main+38>: mov DWORD PTR [eax+0x8],0x21646c72 
0x8048489 <main+45>: mov WORD PTR [eax+0xc],0xa 

나는 컴파일러는 다양한 최적화를 할 수 있다는 것을 이해하지만 최적화를 방지하도록되어 -O0으로 컴파일 심지어 시도했습니다 기본 비록.

외부 라이브러리를 참조하도록 코드를 컴파일하려면 어떻게해야합니까?

내가 지금 나와 함께 부드럽게 : GCC와

+0

재미 있습니다. 문자열 리터럴''Hello World! \ n "'을 복사하고 있습니다. 그것은 정수의 무리로 변환되어 루프는 함수 호출 대신에 풀려 난 것 같습니다. 그 일을 막는 방법을 모르기 때문에 이것은 완전히 논평입니다. – paddy

+0

컴파일러가 떨어지는 지 모르겠지만 자신의 함수를 정의 해 볼 수 있습니다 :'char * (* volatile mystrcpy) (char *, const char *) = strcpy;' – paddy

+4

GCC에 옵션이 있다고 생각합니다. "builtins를 무력하게하는 것", 또는 그런 효과가 있습니다. 저것 좀 봐. –

답변

7

, 당신은 -fno-builtin (해제 모든 내장 명령) 또는 -fno-builtin-strcpy을 사용할 수 있습니다, 유니 이후 어떤 C 또는 어셈블리를하지했습니다 (단지 strcpy를 내장하지 않도록).

+2

동일한 플래그가 clang에도 작동합니다. –

관련 문제