给IDA中的寄存器变量命名的技巧

转载 2016年08月30日 23:10:30

前言

release版中, 尽最大可能使用寄存器变量.
如果一个寄存器变量在一段程序中, 在前10行是一个含义, 在后10行是另外一个含义, 看起来很头痛.
今天看了IDA中改名的UI上有参数可以指定改名的地址范围, 正好解决了这个问题.
逆向过程中的反汇编代码的可读性提高很多

改名后的例子

.text:00401000 ; int __cdecl main(int argc, const char **argv, const char **envp)
.text:00401000 _main           proc near               ; CODE XREF: start+AFp
.text:00401000
.text:00401000 iIn             = dword ptr -4
.text:00401000
.text:00401000 divisor = esi                           ; 除数
.text:00401000                 push    ecx
.text:00401001                 push    divisor
.text:00401002                 push    edi             ; 保存环境
.text:00401002                                         ; ;
.text:00401003 iUserInputBk = edi                      ; 用户输入
.text:00401003 INPUT_HALF = ecx                        ; 用户输入数值的一半
.text:00401003                 push    offset msg1     ; "请输入:"
.text:00401008                 call    _printf
.text:0040100D                 lea     eax, [esp+10h+iIn]
.text:00401011                 push    eax
.text:00401012                 push    offset Format   ; "%d"
.text:00401017                 call    _scanf
.text:0040101C                 mov     iUserInputBk, [esp+18h+iIn]
.text:00401020                 mov     divisor, 2
.text:00401025                 mov     eax, iUserInputBk
.text:00401027                 add     esp, 0Ch        ; 平栈 printf和scanf
.text:0040102A                 cdq
.text:0040102B                 sub     eax, edx
.text:0040102D                 mov     INPUT_HALF, eax
.text:0040102F                 sar     INPUT_HALF, 1
.text:00401031                 cmp     INPUT_HALF, divisor
.text:00401033                 jl      short L_WAS_PRIME
.text:00401035
.text:00401035 PARSE_INPUT:                            ; CODE XREF: _main+41j
.text:00401035                 mov     eax, iUserInputBk
.text:00401037                 cdq
.text:00401038                 idiv    divisor
.text:0040103A                 test    edx, edx        ; edx中余数
.text:0040103C                 jz      short L_NOT_PRIME
.text:0040103E                 inc     divisor
.text:0040103F                 cmp     divisor, INPUT_HALF
.text:00401041                 jle     short PARSE_INPUT
.text:00401043
.text:00401043 L_WAS_PRIME:                            ; CODE XREF: _main+33j
.text:00401043                 push    offset msg2     ; "是素
.text:00401048                 call    _printf
.text:0040104D                 add     esp, 4
.text:00401050                 xor     eax, eax        ; ;
.text:00401050                                         ; ;
.text:00401052                 pop     edi             ; 恢复环境
.text:00401053                 pop     divisor
.text:00401054                 pop     ecx
.text:00401055                 retn
.text:00401056 ; ---------------------------------------------------------------------------

改名时的地址范围图例

Start address 和 End address默认是函数范围内有效, 改成在函数内需要的生效范围(只指定包含特定用途的地址范围).
这里写图片描述

IDA 汇编命令分析以及函数调用过程

dll的文件,入口函数DllEntryPoint: .text:000000018000525C ; BOOL __stdcall DllEntryPoint(HINSTANCE hinstDLL, ...
  • huhaoxuan2010
  • huhaoxuan2010
  • 2017年08月15日 19:39
  • 778

使用IDA的跟踪功能

一个小bug程序 这个小程序只是简单的计算了一下一组数据(1,2,3,4,5)的平均值。这组数据被保存在两个数组里,一个是8bit的数值,一个是32bit数值表示。 #include char...
  • eqera
  • eqera
  • 2012年11月29日 11:31
  • 12528

IDA Pro使用技巧及大杂烩

IDA Pro基本简介 IDA加载完程序后,3个立即可见的窗口分别为IDA-View,Named,和消息输出窗口(output Window)。 IDA图形视图会有执行流,Yes箭头默认为绿色...
  • wang010366
  • wang010366
  • 2016年09月11日 18:50
  • 17476

2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)

当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶Open Subviews菜单打开 反汇编窗口 反汇编窗口也叫IDA-View窗口,...
  • hgy413
  • hgy413
  • 2010年11月15日 16:12
  • 3174

19.IDA-栈指针调节、设置函数特性

栈指针调节 IDA会尽其所能跟踪函数内每一条指令上的栈指针的变化。IDA跟踪这种变化的准确程度,在很大程度上影响着函数的栈帧布局的准确程度。如果IDA无法确定一条指令是否更改了栈指针,你就需要手动...
  • hgy413
  • hgy413
  • 2016年02月03日 11:26
  • 2383

IDA使用之旅(二)工具及窗口的使用

转载请标明是引用于 http://blog.csdn.net/chenyujing1234  欢迎大家拍砖!   本系列内容是我根据“知其所以然论坛”博主录制的学习视频,做的笔记。 一、主要窗口 1、...
  • chenyujing1234
  • chenyujing1234
  • 2012年07月21日 10:44
  • 17304

MFC edit控件实现自动换行

必须设置Vertical Scrollbar = TRUE 必须设置MultiLine = TRUE 必须设置Horizontal Scrollbar = FALSE 必须设置Auto HScr...
  • a200638012
  • a200638012
  • 2016年07月08日 17:22
  • 4799

设置MFC Edit control可以换行显示

MFC Edit control可以换行显示 1.设置edit control 属性Multiline为true 2.写入数据时,想换行的时候写入"\r\n"即可,CString str.Re...
  • a780902723
  • a780902723
  • 2014年12月09日 16:52
  • 2474

MFC中EDIT控件实现换行

一、通过回车换行: 这里要有两个设置 .将控件的属性设置为Mutilines->true; .将控件的另一个属性设置为Want return->true. 水平和垂直滚动条设置...
  • dearwind153
  • dearwind153
  • 2015年12月09日 21:13
  • 3894

IDA学习笔记

标题:IDA学习笔记 作者:kagula 日期:2015-06-09 环境:IDA 6.6、VS2013Update4 阅读前提: 熟悉计算机指令 介绍    通过分析自己用VS2013写的Win ...
  • lee353086
  • lee353086
  • 2015年06月09日 10:45
  • 12669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给IDA中的寄存器变量命名的技巧
举报原因:
原因补充:

(最多只允许输入30个字)