저자가 DUMPBIN을 사용하여 내보내기를 나열하는 자습서와 OllyDbg를 사용하여 내 보낸 함수의 어셈블리 코드를 가져 오는 중입니다. 수출 테이블 RVA가 분해시 실제 주소와 일치하지 않는다면 전체 disassemly에서 함수 코드를 어떻게 찾을 수 있습니까?분해시 함수 찾기
3
A
답변
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는 자동으로 기능을 찾는 데 매우 효과적입니다.
그냥 호기심, 튜토리얼? – Nils
그것은 Reversing : Reverse Engineering의 비밀, Eldad Eilam의 일부입니다. 리버스 엔지니어링 IA-32 Windows 응용 프로그램에 다소 정교한 작업. 그의 첫 번째 목표는 최소한의 도구로 '죽은'목록을 읽는 기술을 개발하는 것입니다. – ProfK