IDA Pro > IDA Pro教程 > 技术问题 > IDA Pro编辑功能(Edit Function)

IDA Pro编辑功能(Edit Function)

发布时间:2023-04-19 11: 33: 48

Action name:EditFunction

Here you can change function bounds,its name and flags.In order to change only the function end address,you can use FunctionEnd command.

If the current address does not belong to any function,IDA beeps.

This command allows you to change the function frame parameters too.You can change sizes of some parts of frame structure.

IDA considers the stack as the following structure:

+------------------------------+

|function arguments|

+------------------------------+

|return address|

+------------------------------+

|saved registers(SI,DI,etc)|

+------------------------------+<-BP

|local variables|

+------------------------------+<-SP

For some processors or functions,BP may be equal to SP.In other words,it can point to the bottom of the stack frame.

You may specify the number of bytes in each part of the stack frame.The size of the return address is calculated by IDA(possibly depending on the far function flag).

"Purged bytes"specifies the number of bytes added to SP upon function return.This value will be used to calculate the SP changes at call sites(used in some calling conventions,such as __stdcall in Windows 32-bit programs.)

"BP based frame"allows IDA to automatically convert[BP+xxx]operands to stack variables.

"BP equal to SP"means that the frame pointer points to the bottom of the stack.It is usually used for the processors which set up the stack frame with EBP and ESP both pointing to the bottom of the frame(for example MC6816,M32R).

If you presseven without changing any parameter,IDA will reanalyze the function.

Sometimes,EBP points to the middle of the stack frame.FPD(frame pointer delta)is used to handle such situations.FPD is the value substracted from the EBP before accessing variables.An example:

push ebp

lea ebp,[esp-78h]

sub esp,588h

push ebx

push esi

lea eax,[ebp+74h]

+------------------------------+

|function arguments|

+------------------------------+

|return address|

+------------------------------+

|saved registers(SI,DI,etc)|

+------------------------------+<-typical BP

||

||

||<-actual BP

|local variables|

||

||

||

+------------------------------+<-SP

In our example,the saved registers area is empty(since EBP has been initialized before saving EBX and ESI).The difference between the'typical BP'and'actual BP'is 0x78 and this is the value of FPD.

After specifying FPD=0x78 the last instruction of the example becomes

lea eax,[ebp+78h+var_4]

where var_4=-4

Most of the time,IDA calculates the FPD value automatically.If it fails,the user can specify the value manually.

If the value of the stack pointer is modified in an unpredictable way,(e.g."and esp,-16"),then IDA marks the function as"fuzzy-sp".

If this command is invoked for an imported function,then a simplified dialog box will appear on the screen.

 

以下为中文翻译:

Action name:EditFunction

这里您可以更改函数边界、其名称和标志。为了只更改函数结束地址,您可以使用FunctionEnd

命令。

如果当前地址不属于任何函数,IDA发出嘟嘟声。

此命令也允许您更改函数框架参数。您可以更改框架结构的某些部分的大小。

IDA将堆栈视为以下结构:+-------------------------------+|函数参数|+-------------------------------+|返回地址|+-----------------------------------+|保存的寄存器(SI、DI等)

|

+-------------------------------+<-

BP|局部变量|+-----------------------------------+<-SP

对于某些处理器或函数,BP可能等于SP。换句话说,它可以指向堆栈帧的底部。

您可以指定堆栈帧每个部分的字节数。返回地址的大小由IDA计算(可能取决于远函数标志)。

“清除的字节”指定函数返回时添加到SP的字节数。此值将用于计算调用站点的SP更改(用于某些调用约定,如Windows 32位程序中的__stdcall)。

“基于BP的帧”允许IDA自动将[BP+xxx]操作变量转换

为堆栈变量。

“BP等于SP”意味着帧指针指向堆栈的底部。它通常用于设置堆栈帧的处理器,其中EBP和ESP都指向帧的底部(例如MC6816、M32R)。

如果您在不更改任何参数的情况下按,IDA将重新分析函数。

有时,EBP指向堆栈帧的中间。PD(帧指针delta)用于处理此类情况。PD是在访问变量之前从EBP减去的值。

例如:push EBP

lea EBP,[esp-78h]

sub esp,588h

push ebx

push esi

lea eax,[ebp+74h]+-------------------------------+

|

函数参数|+-------------------------------+|返回地址|+-----------------------------------+|保存的寄存器(SI、DI等)|+---------------------------------

+<-典型BP|||||<-实际BP|局部变量||||||+------------------------------+<-SPI-

在我们的示例中,保存的寄存器区域是空的(因为在保存EBX和ESI之前已经初始化了EBP)。“典型BP”和“实际BP”之间的差值为0x78,这是FPD的值。

指定FPD=0x78后,示例的最后一条指令变为lea-eax,[ebp+78h+var_4],

其中var_4=-4

大多数时间,IDA自动计算FPD值。如果失败,用户可以手动指定值。

如果堆栈指针的值以不可预测的方式修改(例如“and esp,-16”),则IDA将该函数标记为“fuzzy-sp”。

如果为导入的函数调用此命令,则屏幕上将显示

一个简化的对话框。

展开阅读全文

标签:反汇编软件反编译软件

读者也访问过这里:
邀请您进入交流群 点击扫码
400-8765-888 kefu@makeding.com

专业销售为您服务

欢迎添加好友,了解更多IDA优惠信息,领逆向工程学习资料礼包1份!
热门文章
exe反编译工具哪个好?反编译能力强的工具盘点
随着软件技术的发展,exe(可执行文件)已经成为了电脑、手机等多个平台上的主要软件运行格式,而对于exe文件的反编译也成为了逆向工程中不可缺少的一个步骤。本文将介绍一些常用的exe反编译工具,并评价其优缺点,帮助读者选择合适的工具。
2023-04-12
idapro怎么改为中文
IDA Pro是一款功能强大的反汇编和反编译工具,广泛应用于逆向工程和软件开发领域。在使用IDA Pro时,如果我们不习惯英文界面,可以将其改为中文界面。本文将介绍IDA Pro怎么改为中文界面。IDA Pro界面改成中文主要有两种方法,下面是详细介绍。
2023-04-19
c++反编译工具有哪些
反编译C++代码的工具一般是针对可执行文件和库文件的反汇编和逆向分析工具。本文将给大家介绍c++反编译工具有哪些的内容。市面说的c++反编译工具有很多,下面介绍几款使用认识较多的软件。
2023-04-23
ida怎么查找字符串 ida字符串窗口快捷键
在数字化时代,逆向工程作为解密软件和分析程序的关键技术,正日益受到广泛关注。在逆向分析的过程中,IDA(Interactive DisAssembler)是一款备受推崇的工具,它为逆向工程师们提供了强大的功能和灵活的操作。本文将带您深入探讨如何在IDA中查找字符串,优化字符串窗口的使用,并探讨IDA如何将变量转换成字符串,帮助您更加熟练地驾驭这一工具,为逆向分析的世界增添一抹精彩。
2023-09-27
ida如何转伪代码 ida伪代码怎么看
IDA Pro是一款常用的反汇编和反编译工具,可以帮助我们分析二进制文件的实现细节和执行过程,以便更好地理解程序的执行过程和逻辑。在进行逆向工程的过程中,我们经常需要将反汇编结果转换为伪代码,以便更好地进行分析和修改。本文将介绍如何使用IDA Pro转换为伪代码,并简单讲解ida伪代码怎么看。
2023-04-14
最新文章
IDA Pro怎么进行反汇编 IDA Pro反汇编结果异常如何调整
IDA Pro是一款常用于二进制分析的软件,可以通过反汇编功能将机器指令转换为汇编代码,并结合函数识别、交叉引用、控制流图等功能分析程序结构。实际分析过程中,反汇编结果会受到文件类型、处理器架构、加载参数以及程序自身特征影响。如果出现指令显示异常、函数划分错误或代码区域识别不准确,需要从文件加载、架构设置和人工修正几个方面进行检查。
2026-09-01
IDA Pro怎么设置快捷键 IDA Pro快捷键冲突如何修改
IDA Pro中大量分析操作依赖快捷键完成,例如跳转地址、查看交叉引用、切换视图、添加注释和调试控制等。随着使用时间增加,用户通常会根据自己的分析习惯调整快捷键,或者安装插件后增加新的快捷操作。如果出现快捷键无法触发、执行了错误功能或同一个按键调用多个操作,通常与快捷键绑定、插件Action注册以及配置文件冲突有关,需要逐步确认冲突来源后进行调整。
2026-09-01
IDA Pro怎么打开数据库 IDA Pro数据库文件损坏后如何恢复
IDA Pro分析工程通常会保存为数据库文件,用于记录反汇编结果、函数识别、注释、结构体、脚本修改以及分析状态。常见数据库格式包括旧版本中的【.idb】和新版本中的【.i64】。正常情况下,重新打开数据库即可继续之前的分析工作;如果数据库文件损坏,可能出现无法加载、分析结果丢失或打开后异常退出等问题,需要根据损坏程度选择备份恢复、自动恢复文件或重新导入二进制文件分析。
2026-09-01
IDA Pro怎么安装插件 IDA Pro插件安装后无法加载如何处理
IDA Pro插件可以扩展反汇编分析、调试辅助、脚本自动化和二进制安全分析等功能。不同插件可能采用Python脚本、Python模块或编译动态库形式,因此安装方式和运行环境要求也存在差异。插件安装完成后无法加载时,需要先确认插件文件是否被IDA识别,再检查插件目录、IDAPython版本、依赖组件以及插件自身兼容性。
2026-09-01
IDA Pro逆向DLL怎么追踪回调函数 IDA Pro回调函数没有交叉引用如何定位
DLL中的回调函数通常不会被业务代码直接调用,而是先把函数地址交给系统接口、第三方库或内部对象,等事件发生后再通过函数指针执行。因此,IDA Pro中没有普通交叉引用并不代表函数没有被使用。处理“IDA Pro逆向DLL怎么追踪回调函数IDA Pro回调函数没有交叉引用如何定位”时,要从注册位置、地址保存位置和运行时调用点三个方向建立关系。
2026-08-05
IDA Pro逆向BIN文件怎么识别数据表 IDA Pro数据表被误识别为代码如何转换
BIN文件不包含段表、符号和数据类型,IDA Pro只能根据处理器规则、地址引用和字节特征自动分析。加载地址、指令模式或字节序设置错误时,代码与数据会同时出现错位;加载参数正确后仍有局部异常,才适合把对应区域重新转换为数组、字符串、地址表或结构体。
2026-08-05

通过微信咨询我们

欢迎添加好友,了解更多IDA优惠信息,领取逆向工程学习资料礼包1份!

读者也喜欢这些内容: