能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你得自己搞个特征码呀,然后在定位就能找到啦。
或者用编译器自带的反汇编就ok了。
有的变量没有用过的话,编译器说不定会直接忽略了。
你找都找不到。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
想看这个?VC6进行汇编调试快捷方便
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
00401020 > 55 push ebp
00401021 89E5 mov ebp, esp
00401023 81EC 14000000 sub esp, 14
00401029 90 nop
0040102A B8 00000000 mov eax, 0
0040102F 8945 EC mov dword ptr ss:[ebp-14], eax
00401032 B8 00000300 mov eax, 30000
00401037 50 push eax
00401038 B8 00000100 mov eax, 10000
0040103D 50 push eax
0040103E E8 55000000 call <jmp.&msvcrt._controlfp>
00401043 83C4 08 add esp, 8
00401046 B8 01000000 mov eax, 1
0040104B 50 push eax
0040104C E8 4F000000 call <jmp.&msvcrt.__set_app_type>
00401051 83C4 04 add esp, 4
00401054 8D45 EC lea eax, dword ptr ss:[ebp-14]
00401057 50 push eax
00401058 B8 00000000 mov eax, 0
0040105D 50 push eax
0040105E 8D45 F4 lea eax, dword ptr ss:[ebp-C]
00401061 50 push eax
00401062 8D45 F8 lea eax, dword ptr ss:[ebp-8]
00401065 50 push eax
00401066 8D45 FC lea eax, dword ptr ss:[ebp-4]
00401069 50 push eax
0040106A E8 39000000 call <jmp.&msvcrt.__getmainargs>
0040106F 83C4 14 add esp, 14
00401072 8B45 F4 mov eax, dword ptr ss:[ebp-C]
00401075 50 push eax
00401076 8B45 F8 mov eax, dword ptr ss:[ebp-8]
00401079 50 push eax
0040107A 8B45 FC mov eax, dword ptr ss:[ebp-4]
0040107D 50 push eax
0040107E E8 7DFFFFFF call c.00401000
00401083 83C4 0C add esp, 0C
00401086 8945 F0 mov dword ptr ss:[ebp-10], eax
00401089 8B45 F0 mov eax, dword ptr ss:[ebp-10]
0040108C 50 push eax
0040108D E8 1E000000 call <jmp.&msvcrt.exit>
00401092 83C4 04 add esp, 4
00401095 C9 leave
00401096 C3 retn
C程序几乎必定用到msvcrt的C运行库,所以对于main的调用会出现在msvcrt初始化和退出代码之间。
大部分gcc风格编译器在不做特殊说明的情况下会把程序加载到0x00401000,如果整个程序只有一个函数,那么它就有很大的几率被加载到0x00401000这个位置。0x0040107E这个地址的代码就是“main();”,对main函数的调用。之前的代码自然是对main所需参数的压栈。
对于初学逆向,尚处于摸索阶段的朋友,建议不使用功能过于强大的编译器,因为它们的优化功能可能会导致学习门槛的加高。所以推荐类似于TCC之类的极简主义编译器。大部分win环境下的严格遵守C99的编译器,编译出来的PE文件是很容易读懂的。
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
这不是厉害不厉害的问题,而是熟不熟悉的问题,不一定想不到汇编代码就不是好程序员
编译的时候选择 Debug 模式,就会禁用编译优化了,或者手动禁用就可以了
|
能力值:
( LV9,RANK:190 )
|
-
-
6 楼
同样的函数代码,在同一个编译器下,不同的编译配置就会有不同的对应反汇编代码,不同的编译器也会有不同的反汇编代码,但是功能都应该是一样的
|
能力值:
( LV13,RANK:400 )
|
-
-
7 楼
话说回来,汇编语言学的是CPU对二进制代码的执行机制,高级语言学的是编译器对代码的处理机制。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
谢谢大家回复咯,
我想了下,大概是因为a=10根本在程序中没有用过,可能被编译器给优化掉了,根本就没有这个变量
|
能力值:
( LV12,RANK:200 )
|
-
-
9 楼
您好, 我觉得出了问题, 应该通过OD或WinDbg加载, 单步往下走, 是否被优化看实验结果.
如果是在工作中,将自己猜测的结果报给领导,有很大概率会被领导一顿狂练
我做了下实验, 发现你说的这个最简的main函数还是存在的, 能被找到.
a = 10 确实被Release版优化掉了.
实现环境:
* 主机 Win7X64Sp1
* Pediy版的OD1.1 + OllyWow64.dll 插件
* vs2008 控制台工程, Unicode编码设置, 默认的Release X86编译
将新建立的工程的main函数, 直接换成您上面给出的
// testMain.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
int main()
{
int a=10;
}
启动OD, 加载此ReleaseX86版的exe.
F8往下走, 找到main函数.
0017113E . 53 push ebx
0017113F . 6A 02 push 2
00171141 . 53 push ebx
00171142 . FF15 88331700 call dword ptr [__dyn_tls_init_callba>
00171148 > A1 1C301700 mov eax, dword ptr [envp]
0017114D . 8B0D 80201700 mov ecx, dword ptr [<&MSVCR90.__init>; MSVCR90.__initenv
00171153 . 8901 mov dword ptr [ecx], eax
00171155 . FF35 1C301700 push dword ptr [envp]
0017115B . FF35 20301700 push dword ptr [argv]
00171161 . FF35 18301700 push dword ptr [argc]
00171167 . E8 94FEFFFF call main ; 找到main函数了~
0017116C . 83C4 0C add esp, 0C
0017116F . A3 30301700 mov dword ptr [mainret], eax
00171174 . 391D 24301700 cmp dword ptr [managedapp], ebx
0017117A . 75 37 jnz short 001711B3
0017117C . 50 push eax ; /status
0017117D . FF15 84201700 call dword ptr [<&MSVCR90.exit>] ; \exit
00171183 . 8B45 EC mov eax, dword ptr [ebp-14]
00171186 . 8B08 mov ecx, dword ptr [eax]
00171188 . 8B09 mov ecx, dword ptr [ecx]
0017118A . 894D E0 mov dword ptr [ebp-20], ecx
0017118D . 50 push eax
0017118E . 51 push ecx
0017118F . E8 8E030000 call _XcptFilter ; jmp 到 MSVCR90._XcptFilter
00171194 . 59 pop ecx
00171195 . 59 pop ecx
00171196 . C3 retn
进入main函数, 确实没看到 a = 10 这句话, 因为没有用到, 被Release版优化掉了
00A71000 >/$ 33C0 xor eax, eax ; a = 10, 因为没用到, 被Release版优化掉了
00A71002 \. C3 retn
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
楼上是好人,顶起。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
好强大的感觉
|
能力值:
( LV9,RANK:170 )
|
-
-
12 楼
更加深刻认识到了:一个帖子一定要有好的标题
|
|
|