역방향 - 32 비트 역방향 분석 기술 (2. 데이터 구조)

6785 단어 역공학
역방향 - 32 비트 역방향 분석 기술
  • 국부 변수
  • 전역 변수
  • 국부 변수
  • 스 택 에 국부 변 수 를 저장 하여 스 택 에서 분 배 를 하고 함수 가 실 행 된 후에 이 스 택 을 방출 합 니 다.sub esp, X 를 사용 하여 국부 변수 에 공간 을 할당 할 때 [ebp - X] 주소 지정 으로 이 변 수 를 호출 합 니 다. [ebp + X] 매개 변수 로 ebp 오프셋 에 비해 올 바른 컴 파일 러 를 호출 합 니 다. 최적화 모드 에서 esp 레지스터 를 통 해 국부 변수 와 매개 변 수 를 직접 주소 지정 함수 로 종료 할 때 add esp, 8 명령 균형 스 택 으로 국부 변 수 를 방출 하 는 메모리 (Delphi 컴 파일 러) 를 방출 합 니 다.esp 를 통 해 마 이 너 스 를 추가 하여 메모리 분 배 를 진행 합 니 다.컴 파일 러 는 sub esp 대신 push reg 를 사용 할 수 있 습 니 다. 4 명령 으로 공간 을 절약 할 수 있 습 니 다
  • //              
    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.
  • 레지스터 를 이용 하여 국부 변 수 를 저장 합 니 다. 스 택 에서 2 개의 레지스터 를 차지 하 는 것 을 제외 하고 컴 파일 러 는 나머지 6 개의 유 니 버 설 레지스터 를 이용 하여 국부 변 수 를 최대한 효과적으로 저장 합 니 다.이렇게 하면 코드 를 적 게 만들어 프로그램의 효율 을 높 일 수 있다.레지스터 가 부족 하면 컴 파일 은 변 수 를 스 택 에 넣 습 니 다.역방향 분석 을 할 때 국부 변수의 생존 주기 가 비교적 짧 기 때문에 레지스터 의 변 수 를 제때에 확인 해 야 할 때 그 변 수 를 확인 해 야 한다.

  • 전역 변수
    전역 변 수 는 전체 프로그램 에 작용 합 니 다. 그 는 전역 변수의 메모리 에 계속 존재 합 니 다.부분 변 수 는 함수 스 택 에 존재 하 며 함수 호출 이 끝나 면 사라 집 니 다.대부분의 프로그램 에서 상 수 는 일반적으로 전역 변수 에 놓 여 있다.(등록 판 태그, 테스트 판 태그)
    대부분의 경우 어 셈 블 리 코드 에서 전역 변 수 를 식별 하 는 것 이 다른 구조 보다 훨씬 쉽다.전역 변 수 는 보통 데이터 블록 (data) 의 고정 주소 에 있 습 니 다. 프로그램 이 전역 변 수 를 방문 해 야 할 때 고정 적 인 하 드 인 코딩 주소 로 메모리 주 소 를 직접 찾 습 니 다.
    mov eax, dword ptr [4084C0h]

    좋은 웹페이지 즐겨찾기