저는 어셈블리가 새롭고 현재 교육적 목적으로 조사하고있는 실행 파일이 있습니다. IDA 프로를 사용하여 실행 가능한 목적을 이해하고 있지만 몇 가지 질문이 있습니다. 여기 내 코드는 다음과 같습니다.어셈블리 : 두 개의 addres 추가하기
1.text:00401525 call ebp ; MapViewOfFile
2.text:00401527 mov ebp, eax
3.text:00401529 test ebp, ebp
4.text:0040152B mov [esp+54h+argv], ebp ; argv-shi ari chemi dll gadmotanili
5.text:0040152F jnz short loc_401538
6.text:00401531 push eax ; Code
7.text:00401532 call ds:exit
8.text:00401538 ; ---------------------------------------------------------------------------
9.text:00401538
10.text:00401538 loc_401538: ; CODE XREF: _main+EFj
11.text:0040154C mov esi, [ebp+3Ch]
12.text:0040154F push ebp
13.text:00401550 add esi, ebp
14.text:00401552 mov ebx, eax
15.text:00401554 push esi
16.text:00401555 mov [esp+68h+var_30], ebx
17.text:00401559 mov ecx, [esi+78h]
18.text:0040155C push ecx
19.text:0040155D call sub_401040
제가 질문을 단순화하기 위해 열거했습니다.
1 호선에서 볼 수 있듯이 ebp
에 함수가 호출되고 argv
에 반환 주소가 저장됩니다 (kernel32.dll
이 매핑 됨). 그 후 11 행 (내가 이해할 수있는 것처럼)에서 일부 함수 포인터는 esi
으로 옮겨졌습니다. 3ch
십진수는 60
이고 각 함수는 4 바이트입니다. kernel32.dll
에서 내 보낸 모든 함수를 나열하고 15 번째 함수는 AddSecureMemoryCacheCallback
입니다. 그런 다음 ebp
이 스택에 푸시되고 13 행에서 완전히 혼란스러워졌습니다. 내가 이해할 때 말도 안되는 AddSecureMemoryCacheCallback
을 가리키는 포인터로 시작하는 kernel32.dll
의 포인터를 추가 할 것입니다.하지만이 포인터의 목적은 무엇입니까? 죄송합니다 내 질문에 어리석은 소리, 나는 새로운 어셈블리와 나는 너무 큰 때문에 전체 코드를 붙여 넣을 수 없습니다. 감사.
나는 왜 당신이 수출 명부를보고 있는지 모른다. 'kernel32.dll'가 처음부터 매핑 되었다면,'ebp'는 MZ 헤더를 가리키고 있습니다. 오프셋 60은 PE 헤더에 대한 오프셋 인'e_lfanew'입니다. –
정말 고마워요 :) 내가 말했듯이 나는 의회에서 새로 왔고, 무엇이 너무 보이는지 알지 못했다. 그러나 아직도 내게 불분명하다. 설명해 주시겠습니까? – Rasty