
1. 지역변수 : 함수 내부에서 만들어지는 변수. 함수 호출과 동시에 스택 공간에 메모리가 확보된다.
2. 매개변수 : 지역변수에 속하며, 함수가 호출되었을 때 생성되었다가 사라지기때문에 자동(Auto) 변수라고도 한다.
3. 스택 세그먼트 : 프로그램이 실행되는데 필요한 메모리 영역(함수 전용 메모리). 함수가 호출될 때 필요한 지역변수와 매개변수의 메모리는 스택에 자리잡는다. 그러므로 모든 지역변수는 스택에 위치한다.
* 스택 프레임은 심볼 테이블에 해당하는 메모리, 복귀주소, 이전 EBP로 구성되어 있다.
4. 변수 값 위치
- EBP : 스택 프레임의 기준점 (ex. 0x0012FE08 -> 0x0012FF68 ,
이전 EBP)
- EBP + 4 : 복귀 주소 (ex. 0x0012FE0C -> 0x00401441 ,
복귀 주소)
- EBP + 4 + 4n : 매개변수 메모리 (ex. 0x0012FE10 ->
n번째 매개변수 값)
- EBP - 4n : 지역변수 메모리 (ex. 0x0012FE04 ->
n번째 지역변수 값)
5. 스택 따라가며 변수값 찾기
-
BOOL SymEnumSymbols(
HANDLE hProcess,
ULONG64 BaseOfDll,
PCTSTR Mask,
PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback,
PVOID UserContext );
-
BOOL CALLBACK SymEnumSymbolsProc(
PSYMBOL_INFO pSymInfo,
ULONG SymbolSize,
PVOID UserContext );
-
BOOL CALLBACK (
PENUM_LOCAL_VARS_CALLBACK) (
DWORD dwAddr,
LPCTSTR szType,
LPCTSTR szName,
LPCTSTR szValue,
int iIndexLevel,
PVOID pUserCtx );