A:将数据转换为字符串C:将数据转换为代码D:将数据显示为数据类型。g:直接跳转到某个地址n:更改变量的名称x:对着某个函数、变量按该快捷键,可以查看它的交叉引用H: 将立即值转换为10进制Q: 将立即值转换为16进制B: 将立即值转换为2进制Y:更改变量的类型F5:一键反汇编ESC:回退键,能够倒回上一部操作的视图(只有在反汇编窗口才是这个作用,如果是在其他窗口按下esc,会关闭该窗口)CTRL + ENTER 返回后一个保存位置。; 添加重复注释SHIFT + ; 添加非重复注释。ALT + M //添加标签CTRL + M //跳转到标签CTRL + 数字1 //快速跳转到各视图F2 //下断点
a) 栈数组源码 (栈数组源代码)b) 栈数组对应的汇编代码 (函数test_stack_array对应的汇编代码)c) 双击局部变量跳转到函数的堆栈窗口 (双击局部变量跳转到函数的堆栈窗口)d) 把数组首地址var_20转换为5个int的数组 (把数组首地址var_20转换为5个int的数组)e) var_20转换为5个int的数组后的汇编代码和堆栈布局 (var_20转换为5个int的数组后的汇编代码和堆栈布局)
a) 全局数组源码 (全局数组源码)b) 函数test_global_array汇编代码分析 (函数test_global_array汇编代码分析)c) 跳转到g_nArr的定义处 (跳转到g_nArr的定义处)d) 把地址g_nArr转换为数组 (把地址g_nArr转换为数组)e) g_nArray转换为数组后的定义 (g_nArray转换为数组后的定义)f) g_nArray转换为数组后的汇编代码对比 (g_nArray转换为数组后的汇编代码对比)
a) 全局结构体代码 (全局结构体源码)b) 全局结构体汇编代码分析 (全局结构体汇编代码分析)c) 导入结构体头文件(头文件在附件中)File->Load file->Parse C header file (或者直接快捷键ctrl + F9),然后打开View->Open subviews->Local types(或者快捷键Shift + F1)打开Local types窗口就可以看到刚解析的头文件(也可以手动添加结构体) (打开Local types窗口,查看新添加结构体) (查看新添加的结构体)d) 手动创建结构体PEOPLE3创建结构体主要包括创建字段和添加填充 (创建结构体) (添加结构体字段) (在某个字段后添加填充) (删除结构体中的填充字段)e) 把某个变量转换为结构体类型 (把某个变量转换为结构体类型) (g_sangAnLei全局变量转换为结构体前后对边)
菜单选择“Options”->"General" (显示汇编指定对应的机器码)
鼠标点击要修改的行,菜单选择Edit > Patch program > Assemble 修改指令 最后点击Edit > Patch program > Apply pathes to input file > OK
这个很有用,用windbg调试没有pdb的程序时,可利用IDA的一键反汇编(F5)定位,本例子是分析没有pdb的dmp文件1、 打开windbg,把dump文件拖进windbg中,输入!analyze –v (找出具体的出错位置)2、 windbg找出出错模块svnets的基地址 (找出出错模块的基地址)3、 通过IDA改变svnet模块基地址(rebase) IDA中的地址都是偏移,和windbg中的不一样,可以改变IDA中的基地址来匹配windbg中的地址方法如下:Edit->Segments->Rebaseprogram在弹出的对话框中,输入svnets模块的基地址(图2中start字段的值) (改变模块的基地址)4、 定位到出错位置选择菜单jump->jump to address,在地址框中输入图1中定位到的出错位置:0x78c0b054备注:出错位置是在windbg中通过命令!analyze -v分析出来的 FAULTING_IP:svnets!RunMain+87f2678c0b054 8b08 mov ecx,dword ptr [eax] (跳转到代码出错处)点击OK按钮跳转到出错的汇编代码处(流程图) (流程图显示的汇编代码)按下“空格”键从流程图切换到文本格式的汇编代码视图 (文本显示的汇编代码)从汇编代码的流程图界面,按下F5快捷键跳转到出错的伪代码处。至此可以找到程序的崩溃位置。 (以伪代码形式表示的代码)
阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!
chixiaojie 为什么人世间尽然会有如此精华绝伦的好文章。
怎么收藏此贴?