나는 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와
재미 있습니다. 문자열 리터럴''Hello World! \ n "'을 복사하고 있습니다. 그것은 정수의 무리로 변환되어 루프는 함수 호출 대신에 풀려 난 것 같습니다. 그 일을 막는 방법을 모르기 때문에 이것은 완전히 논평입니다. – paddy
컴파일러가 떨어지는 지 모르겠지만 자신의 함수를 정의 해 볼 수 있습니다 :'char * (* volatile mystrcpy) (char *, const char *) = strcpy;' – paddy
GCC에 옵션이 있다고 생각합니다. "builtins를 무력하게하는 것", 또는 그런 효과가 있습니다. 저것 좀 봐. –