菜鸟学反汇编3—cout
来源:互联网 发布:陆良县多年气象数据 编辑:程序博客网 时间:2024/04/30 20:07
c++代码:
c++代码:
c++代码:
#include<iostream>
#include<iostream>
#include<iostream>
using namespace std;
using namespace std;
using namespace std;
int main()
int main()
int main()
{
{
{
cout<<"输出";
cout<<"输出"<<endl;
cout<<"输出"<<"Good"<<endl;
return 0;
return 0;
return 0;
}
}
}
push offset sub_401030
push offset sub_401040
push offset aGood ; "Good"
push offset aF ; "输?
push offset aF ; "输?
push offset aF ; "输?
push offset unk_41A468 ; int
push offset unk_41A468 ; int
push offset unk_41A468 ; int
call sub_401020
call sub_402230
call sub_402240
add esp, 8
add esp, 8
add esp, 8
push eax ; int
call sub_402240
add esp, 8
mov ecx, eax
mov ecx, eax
call sub_401050
call sub_401060
以下着重研究最后一段代码
push offset sub_401040
可以看出这个与<<endl;有关。
push offset aGood ; "Good"
push第二个输出内容,但是它没有和下面的参数一起被处理 ,而是在先输出”输出”之后的另一个call里才使用到了它。可见处理cout是先将所有参数都push了,然后再一个一个处理。
push offset aF ; "输?
这三行是一个整体,即可以辨别sub_402240这个函数需要两个参数,而我一直对第一个参数不理解是什么作用。这个整体运行完就会出现”输出”而没有”Good”。
push offset unk_41A468 ; int
call sub_402240
add esp, 8
这行是清理掉上个函数所用到的两个参数。同时使”Good”成为栈顶
push eax ; int
这个和push offset unk_41A468 ;应该差不多,但是这个eax是怎么来的呢?我一直追踪下去,没有什么斩获,是我能力太低了的原因。但是可以猜测它的作用的。
call sub_402240
add esp, 8
清理掉上个函数所用到的两个参数。使offset sub_401040成为栈顶
mov ecx, eax
这步的用意是什么?可能是后一个call使用到了ecx这个参数。
call sub_401060
前面的一切疑惑要深入这个函数才能知晓,比如最先push的那个参数怎么没有使用和销毁呢?
现在来看看sub_401060里面的代码
sub_401060 proc near
var_4= dword ptr -4
这是解释代码,即可理解为var_4是esp-4处的空间
arg_0= dword ptr 8
这是解释代码,即可理解为arg_0是esp+8处的空间
push ebp
mov ebp, esp
push ecx
mov [ebp+var_4], ecx
这两句其实就是mov eax,ecx。至于为什么这么做就不清楚了?结合上面的代码mov ecx,eax。发现这就是一个循环, 只可以猜测这样的处理是因为之后call 的函数之中也有用到ecx(可能里面还是一个这个循环)。
mov eax, [ebp+var_4]
push eax
call [ebp+arg_0]
add esp, 4
这两句很奇怪啊,既然之后要给esp赋值,为什么之前还要有一次对它进行+操作?之前有两个push,则这步使esp编程这个子程没有被调用之前的值。即清理掉了前两个参数。
mov esp, ebp
pop ebp
retn 4
这句返回esp+4地址。即跳过了call操作push入的地址而跳到主体push offset sub_401040.压入的 sub_401040.。
反思:
还有很多细节没有弄清楚
下步:
增加cin
- 菜鸟学反汇编3—cout
- 菜鸟学反汇编5—cout char型和其他数值型
- 菜鸟学反汇编6—cout和多个变量
- 菜鸟学反汇编1—empty
- 菜鸟学反汇编2—real_empty
- 菜鸟学反汇编4—cin
- 菜鸟学反汇编7—for
- 菜鸟学反汇编8—do_while
- 菜鸟学反汇编9—switch
- 菜鸟学反汇编10—call
- 菜鸟反汇编学习前言
- 一起来学反汇编-之if语句
- 一起来学反汇编-之switch语句
- 一起来学反汇编之循环语句
- 菜鸟学汇编004 DS寄存器
- 菜鸟学汇编001 计算机硬件基础
- 反汇编——逆向初步(3)
- 【分享】超级菜鸟另类玩swf反汇编
- 用VB.net2008编写精美电子日历
- ★网址站收录技巧与攻略
- VISTA注册ActiveX控件出现 0x80040200的处理方法
- Understanding Memory Leaks in ActionScript (Adobe Flex)
- javascript合成事件
- 菜鸟学反汇编3—cout
- 我的平安夜
- 一个非常方便好用的ADO数据库连接字符串生成工具
- 新浪合并分众,迟到的广告盛宴
- Python读写文件
- 惟一 和 唯一?
- 函数开始处的MOV EDI, EDI的作用
- C/C++ 字节序/位域(Bit-fields)之我见
- 何谓“准就业”?不要被忽悠了!