能力值:
( LV9,RANK:490 )
2 楼
pop ebp之后,ebp里似乎是 ImprotTable
能力值:
( LV3,RANK:20 )
3 楼
ImportTable DD AddressFirst-ImportTable ;
声明局部变量是动态分配的,相当于mov [ebp-4],0;
刚想明白,是这样的吧?
能力值:
( LV9,RANK:490 )
4 楼
call 的返回地址就是ImportTable 因为紧接着call的指令是ImportTable DD AddressFirst-ImportTable
个人观点
能力值:
( LV3,RANK:20 )
5 楼
程序运行的时候执行到ImportTable DD AddressFirst-ImportTable ;这句的时候会动态分配内存,不是在编译的时候就把这句搞定了,这样call的下一地址就是ImportTable DD AddressFirst-ImportTable ;把这句地址压入堆栈。可以这样理解吗?
能力值:
( LV9,RANK:490 )
6 楼
程序好像执行不到那里,应该是编译的时候就搞定了
能力值:
( LV3,RANK:20 )
7 楼
执行不到那里,为什么会把ImportTable DD AddressFirst-ImportTable ;OriginalFirstThunk的地址压入堆栈啊,压入的地址不就是call之后要执行的代码吗?弄不明白啊。
能力值:
( LV9,RANK:490 )
8 楼
call @F
szLoadLibrary db 'LoadLibraryA',0
szGetProcAddress db 'GetProcAddress',0
szUser32 db 'user32',0
szMessageBox db 'MessageBoxA',0
szCaption db '问题提示',0
szText db 'Are you Sure?',0
@@:
pop ebx 编译后
0040100A > /E8 46000000 call 00401055
0040100F . |4C dec esp <-无论这句执行不执行的到,上面call之后压入的是这句的地址
00401010 . |6F outs dx, dword ptr es:[edi]
00401011 . |61 popad
00401012 . |64:4C dec esp
00401014 . |6962 72 61727>imul esp, dword ptr [edx+72], 4179726>
0040101B . |0047 65 add byte ptr [edi+65], al
0040101E . |74 50 je short 00401070
00401020 . |72 6F jb short 00401091
00401022 . |6341 64 arpl word ptr [ecx+64], ax
00401025 . |64:72 65 jb short 0040108D
00401028 . |73 73 jnb short 0040109D
0040102A . |0075 73 add byte ptr [ebp+73], dh
0040102D . |65:72 33 jb short 00401063
00401030 . |3200 xor al, byte ptr [eax]
00401032 . |4D dec ebp
00401033 . |65:73 73 jnb short 004010A9
00401036 . |61 popad
00401037 . |67:65:42 inc edx
0040103A . |6F outs dx, dword ptr es:[edi]
0040103B . |78 41 js short 0040107E
0040103D . |00CE add dh, cl
0040103F . |CA CCE2 retf 0E2CC
00401042 |CC int3
00401043 . |E1 CA BE 00 ascii "崾?,0
00401047 . |41 72 65 20 7>ascii "Are you Sure?",0
00401055 $ |5B pop ebx <- 执行完这句ebx=0040100F
明白了吗?
能力值:
( LV3,RANK:20 )
9 楼
szLoadLibrary db 'LoadLibraryA',0
szGetProcAddress db 'GetProcAddress',0
szUser32 db 'user32',0
szMessageBox db 'MessageBoxA',0
szCaption db '问题提示',0
szText db 'Are you Sure?',0
编译出来就是下面的
0040100F . |4C dec esp <-无论这句执行不执行的到,上面call之后压入的是这句的地址
00401010 . |6F outs dx, dword ptr es:[edi]
00401011 . |61 popad
00401012 . |64:4C dec esp
00401014 . |6962 72 61727>imul esp, dword ptr [edx+72], 4179726>
0040101B . |0047 65 add byte ptr [edi+65], al
0040101E . |74 50 je short 00401070
00401020 . |72 6F jb short 00401091
00401022 . |6341 64 arpl word ptr [ecx+64], ax
00401025 . |64:72 65 jb short 0040108D
00401028 . |73 73 jnb short 0040109D
0040102A . |0075 73 add byte ptr [ebp+73], dh
0040102D . |65:72 33 jb short 00401063
00401030 . |3200 xor al, byte ptr [eax]
00401032 . |4D dec ebp
00401033 . |65:73 73 jnb short 004010A9
00401036 . |61 popad
00401037 . |67:65:42 inc edx
0040103A . |6F outs dx, dword ptr es:[edi]
0040103B . |78 41 js short 0040107E
0040103D . |00CE add dh, cl
0040103F . |CA CCE2 retf 0E2CC
00401042 |CC int3
00401043 . |E1 CA BE 00 ascii "崾?,0
00401047 . |41 72 65 20 7>ascii "Are you Sure?",0
当要访问这些变量就是执行这些代码吗?能大概解释下这些代码吗?
能力值:
( LV9,RANK:490 )
10 楼
虽然OD认为他们是代码,但上面的是字符串,不是代码。
这些被放在代码段的变量,像访问其他变量一样,是访问这些字符串,而不是执行他们。
能力值:
( LV3,RANK:20 )
11 楼
真的是字符串啊,谢谢大侠的回答。