사실 저는 버퍼 오버플로 공격에 대해 배우고 있어요. 그렇다면 버퍼 주소를 알아낼 수 있습니까? (저는 버퍼에 쓸 때 스택에서 이를 변경하도록 프로그램에서 버퍼 변수를 사용하고 있습니다.)
답변1
예, 변수가 최적화되지 않는 한 가능합니다.
예를 들어 ls
디버깅 기호와 함께 사용됩니다.
gdb ls
>>> break main
>>> run
>>> print argv
$1 = (char **) 0x7fffffffdd78
이 경우 argv
포인터 자체입니다. 포인터가 아닌 변수의 주소나 포인터의 주소를 원하는 경우 &
C에서와 같이 사용하면 gdb
위와 같이 주소를 제공하거나 변수가 메모리에 저장되지 않았는지 알려줍니다.
>>> printf &argc
Address requested for identifier "argc" which is in register $rdi
x86에서는 의 내용을 통해 SP
스택 위치를 알 수 있습니다.
>>> i r sp
sp 0x7fffffffdc98 0x7fffffffdc98