C 프로그램에서 변수의 주소를 얻기 위해 GDB를 사용할 수 있습니까?

C 프로그램에서 변수의 주소를 얻기 위해 GDB를 사용할 수 있습니까?

사실 저는 버퍼 오버플로 공격에 대해 배우고 있어요. 그렇다면 버퍼 주소를 알아낼 수 있습니까? (저는 버퍼에 쓸 때 스택에서 이를 변경하도록 프로그램에서 버퍼 변수를 사용하고 있습니다.)

답변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

관련 정보