2009-03-01 3 views
3

저자가 DUMPBIN을 사용하여 내보내기를 나열하는 자습서와 OllyDbg를 사용하여 내 보낸 함수의 어셈블리 코드를 가져 오는 중입니다. 수출 테이블 RVA가 분해시 실제 주소와 일치하지 않는다면 전체 disassemly에서 함수 코드를 어떻게 찾을 수 있습니까?분해시 함수 찾기

+0

그냥 호기심, 튜토리얼? – Nils

+1

그것은 Reversing : Reverse Engineering의 비밀, Eldad Eilam의 일부입니다. 리버스 엔지니어링 IA-32 Windows 응용 프로그램에 다소 정교한 작업. 그의 첫 번째 목표는 최소한의 도구로 '죽은'목록을 읽는 기술을 개발하는 것입니다. – ProfK

답변

2

RVA는 재배치 가능한 가상 주소입니다. 프로세스 공간에서 실제 주소를 찾으려면 프로세스에서 모듈이로드 된 기본 주소를 알아야합니다. 해당 기본 주소를 RVA에 추가하면 실제 주소를가집니다. 나는 ollydbg를 사용하지 않았지만 그것이 부착 된 프로세스에로드 된 모듈의 기본 주소를 제공하지 않으면 놀라게 될 것입니다. 몇 가지 이유로 그 정보를 제공하지 않으면 sysinternal 도구에서 procexp.exe를 사용하여 얻을 수 있습니다.

2

높은 수준의 언어로 작성된 프로그램의 경우 함수에 대한 좋은 좋은 지표는 스택 프레임을 설정하는 코드입니다.

문제의 코드를 생성하는 데 사용 된 컴파일러가 무엇인지 찾아야합니다.

내 예에서
$ cat main.c 
int main(int argc, char **argv) { 
     return 1; 
} 
$ gcc -m32 -S main.c 
$ cat main.s 
     .file  "main.c" 
     .text 
.globl main 
     .type main, @function 
main: 
     leal  4(%esp), %ecx 
     andl  $-16, %esp 
     pushl -4(%ecx) 
     pushl %ebp 
     movl  %esp, %ebp 
     pushl %ecx 
     movl  $1, %eax 
     popl  %ecx 
     popl  %ebp 
     leal  -4(%ecx), %esp 
     ret 
     .size main, .-main 
     .ident "GCC: (Debian 4.3.3-4) 4.3.3" 
     .section .note.GNU-stack,"",@progbits 

상기 의 movl % ESP, EBP %의 지시가 설정 코드의 마지막 명령이다.

free-as-in-beer version을 다운로드 할 수있는 상용 디스어셈블러 IDA Pro는 자동으로 기능을 찾는 데 매우 효과적입니다.

+0

나는 무료 IDA Pro를 가지고 있으며, 환상적이지만, 나는 책 저자와 함께 이것을 지키고있다. 나는 당신의 대답이 암시하는 것처럼 어떤 기능도 찾고 있지는 않지만 특정 수출품을 찾고 있었다. 여기에 표시되는 이상한 언어는 무엇입니까? 저는 Windows 만 알고 있습니다. :-) – ProfK

+0

"이상한 언어"는 유닉스 쉘 세션의 복사 및 붙여 넣기 텍스트이며 "$"는 프롬프트입니다. x86 어셈블리로 컴파일되는 최소한의 C 프로그램. – hillu

+0

이상한 언어는 AT & T 표기법입니다 ;-) – ProfK