调用约定+OD快捷键+IDA快捷键

1.调用约定

1.1 32位

1.c/c++默认调用约定是_cdecl,返回值在EAX中,该调用规定参数按照从右到左的顺序入栈,由调用者负责清除栈。

2.pascal 语言的调用约定是pascal,参数按照从左到右的方式入栈,函数自身清理堆栈,返回值在EAX中。VC 中已经废弃了这种调用方式。

3.Win32API的调用约定是stdcal,参数从右到左的方式入栈,函数自身清理堆栈,返回值在EAX中。

4.Fastcall通过 CPU 寄存器来传递参数。他用 ECX 和 EDX 传送前两个双字(DWORD)或更小的参数,剩下的参数按照从右至左的方式入栈,函数自身清理堆栈,返回值在 EAX 中。Microsoft Visual C++ 编译器在采用 Fastcall 规范传递参数时,左边的2个不大于4字节(DVORD)的参数分别放在ecx 和edx 奇存器中,寄存器用完后就要使用栈,其余参数仍然按从右到左的顺序压人栈,被调用的西数在返回前清理传送参数的栈。浮点值、远指针和_in164 类型总是通过栈来传递的。

5.thiscall是唯一一个不能明确指明的函数修饰, 因为thiscall不是关键字。它是C++类成员函数缺省的调用约定。由于成员函数调用还有一个this指针, 因此必须特殊处理, thiscall意味着:参数从右向左入栈。如果参数个数确定, this指针通过ecx传递给被调用者, 如果参数个数不确定, this指针在所有参数压栈后被压入堆栈,对参数个数不定的, 调用者清理堆栈, 否则函数自己清理堆栈。

1.2 64位

x64应用程序只有1种寄存器调用约定。前4个参数使用寄存器传递,如果参数超过 4个,多余的参数就放在栈里,人栈顺序从右到左,由函数调用方平衡栈空间。前4个参数存放的寄存器是固定的,分别是第1个参数RCX、第2个参数RDX、第了个参数R8、第4个参数 R9,其他参数从右往左依次人栈。任何大于8字节或者不是1 字节、2字节、4字节、8字节的参数必须由引用来传递(地址传递)。所有浮点参数的传递都是使用 XMM 寄存器完成的,它们在 XMMO、XMIMI、XMM2 和XMM3 中传递。

2、OD常用快捷键 指令

快捷键功能
Ctrl+F2重启程序,即重新启动被调试程序。如果当前没有调试的程序,OllyDbg会运行历史列表[historylist]中的第一个程序。程序重启后,将会删除所有内存断点和硬件断点。
Alt+F2 关闭,即关闭被调试程序。如果程序仍在运行,会弹出一个提示信息,询问您是否要关闭程序。
F7单步步入到下一条命令,如果当前命令是一个函数[Call],则会停在这个函数体的第一条命令上。如果当前命令是含有REP前缀,则只执行一次重复操作。
F8

单步步过到下一条命令。如果当前命令是一个函数,则一次执行完这个函数(除非这个函数内部包含断点,或发生了异常)。如果当前命令是含有REP前缀,则会执行完重复操作,并停在下一条命令上。

F9让程序继续执行。
Alt+B 显示断点窗口。在这个窗口中,您可以编辑、删除、或跟进到断点处。
Alt+C 显示CPU窗口。
Alt+E显示模块列表[list of modules]。
Alt+K显示调用栈[Call stack]窗口。
Alt+M 显示内存窗口。

当CPU窗口中的反汇编面板处于激活状态时,常用快捷间:

快捷键功能
Alt+退格键 撤消所选部分的修改,以备份数据的相应内容替换所选部分。仅当备份数据存在且与所选部分不同时可用。
F2在首个选择的命令上开关INT3 断点[Breakpoint],也可以双击该行第二列。
Ctrl+E以二进制(十六进制)格式编辑所选内容。
Ctrl+G转到某地址。该命令将弹出输入地址或表达式的窗口。该命令不会修改 EIP。
分号(;)添加注释[comment]。显示添加注释窗口[Add label]或修改注释窗口[Changelabel],您可在此输入与首条所选命令的第一个字节相关联的注释(注释串会显示在最后一列中)。


3、IDA常用快捷键 

快捷键功能
空格键切换反汇编窗口(列表视图&图形视图)
G定位地址
X交叉引用
TAB汇编指令和伪代码之间切换
双击转到定义处
;输入的注释,所有交叉参考处都会出现,
:输入的注释只在该处出现
F5显示C伪代码
Alt+t打开文本搜索对话框

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值