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 Pro是一款常用的反汇编和反编译工具,可以帮助我们分析二进制文件的实现细节和执行过程,以便更好地理解程序的执行过程和逻辑。在进行逆向工程的过程中,我们经常需要将反汇编结果转换为伪代码,以便更好地进行分析和修改。本文将介绍如何使用IDA Pro转换为伪代码,并简单讲解ida伪代码怎么看。
2023-04-14
ida怎么查找字符串 ida字符串窗口快捷键
在数字化时代,逆向工程作为解密软件和分析程序的关键技术,正日益受到广泛关注。在逆向分析的过程中,IDA(Interactive DisAssembler)是一款备受推崇的工具,它为逆向工程师们提供了强大的功能和灵活的操作。本文将带您深入探讨如何在IDA中查找字符串,优化字符串窗口的使用,并探讨IDA如何将变量转换成字符串,帮助您更加熟练地驾驭这一工具,为逆向分析的世界增添一抹精彩。
2023-09-27
最新文章
IDA Pro中怎么添加注释和标记 还有哪些技巧可以提高代码的可读性
在反汇编与逆向工程的过程中,IDA Pro中怎么添加注释和标记 还有哪些技巧可以提高代码的可读性,是每个使用者都会遇到的关键问题。IDA Pro作为功能强大的反汇编工具,帮助我们分析程序、理解其工作原理。而在反汇编过程中,如何高效地注释、标记代码,提升代码可读性,显得尤为重要。今天,我们就来探讨一下,如何在IDA Pro中处理这些问题,并且分享一些提高代码可读性的技巧,帮助你在逆向分析过程中更加得心应手。
2025-01-10
IDA PRO floating版安装和连接许可服务器教程
Floating版IDA PRO安装后不需要导入许可文件,也没有专门的客户端许可文件。安装后打开软件连接 License Server获取许可,也可以借出许可脱离License Server使用。
2025-01-08
安装Lumina服务器和导入许可指南
安装Lumina服务器和导入许可指南
2025-01-08
安装Teams Server和导入许可指南
安装Teams Server和导入许可指南
2025-01-08
安装License Server和导入许可指南
安装License Server和导入许可指南
2025-01-08
IDA Pro Portal 许可和程序下载安装指南
Hex-rays IDA 现采用全新的Portal帐户中心交付方式,用户购买后登录Hex-rays Portal 获取许可和程序,不再邮件发送许可文件和程序。
2025-01-07

通过微信咨询我们

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

读者也喜欢这些内容: