포너블 공부 시작한 초보입니다. Stack Canary 파트에서 ssp_001 실습을 하면서 생긴 질문들입니다.
문제를 풀 때 이전에 풀던 문제들과는 다르게 변수가 여러 개 선언되어있는 걸 보고 gdb로 main의 어셈블리 코드를 구했습니다. 여기서 lea 명령어를 갖는 코드 부분을 보니까
[ebp-0x8a]
[ebp-0x88]
[ebp-0x94]
[ebp-0x48]
[ebp-0x90]
으로 총 5개가 있는 것을 확인했습니다. 근데 여기서 어떤 부분이 어뗜 변수를 저장하는지 알아내는 방법을 잘 모르겠습니다. 그래서 name과 box의 위치를 파악하지 못했는데 이런 식으로 변수가 여러 개 일 때 각 변수의 스택 위치 알아내는 거 관련해서 팁 좀 부탁드립니다.
일단 symbol이 있는 경우에는 gdb에서 p &name, p &box 이런 식으로 하면 쉽게 주소를 확인 하실 수 있습니다. 만약 symbol이 없는 경우라면 함수의 sfp(stack frame pointer) 기준으로 계산하시면 됩니다. sfp 위치를 찾기 힘드시다면 bt 후 나오는 함수 목록 중 main 함수를 찾아 info frame 5 이런 식으로 하면 saved rbp 값을 통해 sfp의 위치를 찾으실 수 있습니다. 또한 스택 속 값을 좀 더 편하게 보고 싶으시다면 tele 명령어를 사용해보세요. tele $rbp-0x100과 같이 사용하면 더 가독성 있게 스택 내부 값을 확인 가능합니다. 더 궁금한 점이나 이해 안 되는 부분은 디스코드 haehet_으로 질문 주세요.