2014-09-20 1 views
2

저는 Aleph One's awesome introduction to smashing the stack을 따르고 있습니다.하지만 저는 그가 가지고있는 예제 프로그램 중 하나를 실행하는 데 어려움을 겪었습니다. 문제는 라인 jmp 0x2a을 컴파일하고 분해하면 정확한 라인이 생성되는 반면, 알레프 코드에서는 jmp 0x800015f <main+47>으로 변환된다는 것입니다. 어떻게하면 gcc가 절대적인 것이 아닌 상대적으로 점프하도록 만들 수 있습니까 (이것은 내가 생각하는 것입니다).어셈블리에서 상대 점프를 수행하는 방법은 무엇입니까?

답변

1

문제는 0x2a입니다. 절대 주소처럼 보이지만 원하는 것은 상대 주소입니다.

목적지에 라벨을 지정하고 점프하면 다음과 같이 수행 할 수 있습니다. 어셈블러는 대부분 상대 시간 점프를 생성하는 것을 선호합니다. 또는 상대 주소를 사용하십시오. 대부분의 어셈블러는 .+0x2a과 비슷한 것을 허용합니다. 여기서 .은 현재 명령어 포인터를 나타내는 기호입니다. 일부는 $을 대신 사용합니다.

+0

'. + 0x2a'가 완벽하게 작동했습니다. 정말 고마워요! – Xantos

관련 문제