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类型库怎么加载 IDA类型库加载后类型不准怎么调整
做逆向时,类型一旦没跟上,后面的结构体、函数原型和伪代码都会一起发飘。很多人以为类型库就是装进 IDA 以后自动全局生效,实际上 IDA 现在把类型相关动作拆成了几层,类型库负责提供外部定义,本地类型负责落到当前数据库里,真正套到函数和数据上还要再做一步应用,所以前面少一步,后面就会出现类型明明加载了,但看起来还是不准的情况。官方文档也明确写到,外部类型库加载后可在整个 IDA 中访问,而一旦被引用,就会复制到当前数据库的【Local Types】里。
2026-04-01
IDA结构体怎么套用 IDA结构体字段大小不对怎么办
在IDA里,结构体用顺了,反汇编和伪代码会一下子清爽很多;用不顺,最常见的就是偏移全是数字,字段名出不来,或者明明已经建了结构体,成员大小还是一团乱。Hex-Rays官方文档把这两件事分得很清楚,一类是把结构体真正套到数据和操作数上,另一类是回到类型定义里把成员宽度和布局修正好。
2026-04-01
IDA堆栈变量怎么改名 IDA堆栈变量偏移不对怎么修正
在IDA里看函数,堆栈变量问题常常不是一个点出错,而是一串问题连着冒出来。前面你会觉得var_10、arg_4这种名字太乱,后面继续往下看,才发现真正麻烦的是栈帧本身没识别准,结果变量偏移看着别扭,伪代码还会跟着发红,甚至直接跳出正栈指针之类的报错。Hex-Rays官方文档把这件事分得很清楚,改名只是整理阅读体验的一层,真正决定偏移准不准的,往往是栈指针变化、函数栈帧布局和局部变量分配。
2026-04-01
IDA函数边界怎么修正 IDA函数边界识别错位怎么处理
做逆向时,函数边界一旦识别歪了,后面很多判断都会跟着跑偏。轻一点的情况,是伪代码里突然冒出跳不回来的分支,或者函数尾巴被截掉一段。重一点的情况,是本来属于别的函数的代码被吞进来,结果图视图、交叉引用、反编译输出全都开始别扭。Hex-Rays官方对这件事讲得很直白,函数边界、函数尾块、无返回函数分析和重新分析机制,本来就是连在一起看的,边界错了,后面很多分析结果都会被带偏。
2026-04-01
IDA Hex-Rays伪代码怎么刷新 IDA Hex-Rays伪代码变量名怎么整理
用Hex-Rays看伪代码时,很多人不是不会点功能,而是顺序没走对。改了类型以后没刷新,看到的还是旧结果;先急着改变量名,结果类型还没理顺,越改越乱。官方文档其实把这套流程写得很明白,伪代码窗口支持手动重编译,局部变量也可以直接重命名、改类型、做变量映射,只是这些动作要按顺序配合着用,效果才会稳定。
2026-04-01
IDA Lumina怎么启用 IDA Lumina同步失败怎么排查
很多人第一次接触 IDA Lumina,会以为它和普通插件一样,装好就会自己开始同步,结果要么菜单里没有相关动作,要么明明点了同步却一直没返回预期结果。实际上,Lumina这一套功能分成客户端启用、服务器选择、自动拉取和手动推送几层来配,前面少一步,后面就容易看起来像是同步失败。Hex-Rays 目前的官方文档也把这几层拆得很清楚,公共服务器和私有服务器的配置方式不同,自动同步发生在初始自动分析结束后,手动同步则要从【Lumina】菜单单独触发。
2026-04-01

通过微信咨询我们

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

读者也喜欢这些内容: