역방향 - 32 비트 역방향 분석 기술 (2. 데이터 구조)
6785 단어 역공학
//
1.
sub esp, n
...
add esp, n
2.
add esp, -n
...
sub esp, -n
3.
push reg
...
pop reg
// push reg sub esp, 4
//C
int add(int x, int y)
int main()
{
int a=5;
int b=6;
add(a,b);
return 0;
}
int add(int x, int y)
{
int z;
z=x+y;
return z;
}
// ( )
//main
push ebp
mov ebp, esp
sub esp, 00000008
mov [ebp-04], 00000005 ; a
mov [ebp-08], 00000006 ; b
mov eax, dword ptr [ebp-08] ; b eax
push eax
mov ecx, dword ptr [ebp-04]
push ecx
call 0040102A
add esp, 00000008
xor eax, eax
mov esp, ebp
pop ebp
ret
//add(int x, int y)
push ebp
mov ebp, esp
push ecx ; (sub esp, 4)( )
mov eax, dword ptr[ebp+08] ;
add eax, dword ptr[ebp+0C]
mov dword ptr[ebp-04], eax ; [ebp-04]
mov eax, dword ptr[ebp-04]
mov esp, ebp
pop ebp
ret
부분 변수의 시작 값 은 무 작위 로 다른 함수 가 실 행 된 후 스 택 에 남아 있 는 쓰레기 데이터 이 므 로 초기 화 해 야 합 니 다.부분 변 수 를 초기 화 하 는 방법 은 두 가지 가 있 습 니 다. 1. mov 명령 을 통 해 변수 할당, 예 를 들 어 mov [ebp - 04], 5.2. push 명령 을 사용 하여 값 을 창고 에 직접 넣 습 니 다. 예 를 들 어 push 5.
전역 변수
전역 변 수 는 전체 프로그램 에 작용 합 니 다. 그 는 전역 변수의 메모리 에 계속 존재 합 니 다.부분 변 수 는 함수 스 택 에 존재 하 며 함수 호출 이 끝나 면 사라 집 니 다.대부분의 프로그램 에서 상 수 는 일반적으로 전역 변수 에 놓 여 있다.(등록 판 태그, 테스트 판 태그)
대부분의 경우 어 셈 블 리 코드 에서 전역 변 수 를 식별 하 는 것 이 다른 구조 보다 훨씬 쉽다.전역 변 수 는 보통 데이터 블록 (data) 의 고정 주소 에 있 습 니 다. 프로그램 이 전역 변 수 를 방문 해 야 할 때 고정 적 인 하 드 인 코딩 주소 로 메모리 주 소 를 직접 찾 습 니 다.
mov eax, dword ptr [4084C0h]