在 OllyDbg 和 Assembler 中,EBP+8 是什么意思?

2024-06-20

我正在学习 OllyDbg 中的汇编和调试技巧,以便学习如何使用未记录的函数。现在我遇到以下问题:

我有以下代码部分(来自 OllyDbg):

MOV EDI,EDI
PUSH EBP
MOV EBP,ESP
MOV EAX, DWORD PTR SS:[EBP+8]
XOR EDX,EDX
LEA ECX, DWORD PTR DS:[EAX+4]
MOV DWORD PTR DS:[EAX], EDX
MOV DWORD PTR DS:[ECX+4],ECX
MOV DWORD PTR DS:[ECX],ECX
MOV DWORD PTR DS:[EAX+C],ECX
MOV ECX, DWORD PTR SS:[EBP+C]

这是函数的开始,目标是找到数据结构。所以我发现它首先将 EBP 压入堆栈,然后将 ESP(当前堆栈指针)移动到 EBP,我认为它现在为该函数定义了一个堆栈帧。现在教程说,在流行的布局中,第一个参数放置在 [EBP+8] 处,第二个参数放置在 [EBP+C] 处

这是我不明白的。我如何知道第一个参数位于 EBP+8 处?

希望有人可以帮助我! 谢谢!


您指的是哪种“未记录的功能”?大多数时候,汇编只是编译的高级代码。几乎没有任何“未记录”的内容。

EBP最常在函数中用作堆栈帧指针,尤其是在 C 调用约定中(也称为cdecl)。通过这种约定,参数以相反的顺序在堆栈上传递(例如,最后一个参数首先被压入),并且被调用的函数使用EBP访问它们。根据您发布的代码,我认为第一个参数可能指向数据结构。看一看 :

MOV EAX, DWORD PTR SS:[EBP+8]
LEA ECX, DWORD PTR DS:[EAX+4]
MOV DWORD PTR DS:[EAX], EDX
MOV DWORD PTR DS:[ECX+4],ECX
MOV DWORD PTR DS:[ECX],ECX
MOV DWORD PTR DS:[EAX+C],ECX
MOV ECX, DWORD PTR SS:[EBP+C]

第一条指令将第一个参数移入EAX。然后将偏移量 4 添加到该参数并移入ECX。请注意,这是由LEA指令,它是“加载有效地址”的简写。它用于无符号算术,编译器喜欢在进行指针算术和添加偏移量时使用它 - 所以每当你看到这条指令时,你应该警惕它所操作的任何内容might是一个指向结构体的指针。当然,没有办法确定。后来我们有一些MOV往返该地址,其中ECX用于访问内存。这些结构(如果存在)在 C 中看起来像这样:

struct a { /* pointed to by EAX / [EBP+8] */
    int memb1; /* MOV DWORD PTR DS:[EAX], EDX */
    struct b* memb2; /* LEA ECX, DWORD PTR DS:[EAX+4] */
    int memb3; /* unused? */
    int memb4; /* MOV DWORD PTR DS:[EAX+C],ECX */
};

struct b {
    int memb1; /* MOV DWORD PTR DS:[ECX],ECX */
    int memb2; /* MOV DWORD PTR DS:[ECX+4],ECX */
};

希望这能以某种方式解决问题。逆向工程汇编代码是一项非常困难且耗时的任务,特别是如果您没有任何 API 调用来告诉您应用程序使用的参数类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OllyDbg 和 Assembler 中,EBP+8 是什么意思? 的相关文章

随机推荐

  • ValueError:形状(无,1)和(无,2)不兼容

    我正在训练面部表情 愤怒与快乐 模型 最后一个密集输出层以前为 1 但当我预测图像时 它的输出始终为 1 准确度为 64 所以我将其更改为 2 表示 2 个输出 但现在我收到这个错误 Epoch 1 15 ValueError Traceb
  • 在 Powershell 中使用用户名/密码连接到网络文件夹

    我经常在 Powershell 中访问共享网络文件夹以获取文件等 但如果共享需要用户名 密码 Powershell 不会提示我输入这些信息 这与 Windows 资源管理器不同 如果我首先在 Windows 资源管理器中连接到该文件夹 Po
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • 如何从文件C++中读取带有科学记数法的浮点数?

    我有一个具有以下格式的文件 0 0064785667 0 73900002 0 028505694 4 7858757e 39 315 218 0 0051828534 0 73900002 0 028505694 4 6936954e 3
  • 占位符 HTML 元素?

    是否有任何 HTML 元素可以用来包装其他元素以用作占位符 例如 ul ul
  • 递归例程获取PropertyInfo

    我正在尝试创建一个递归例程 它将检索指定对象 在 NET 3 5 中 下的所有成员的 PropertyInfos 直接成员的一切都正常 但它还需要解析嵌套类 及其嵌套类等 我不明白如何处理解析嵌套类的部分 这部分代码你会怎么写呢 publi
  • 在 Flutter 中从 Play 商店获取产品时应用内购买崩溃

    我在安装和实施后遇到问题应用内购买插件 https pub dev packages in app purchaseFlutter 团队提供 到目前为止我做了什么 在 Play 商店中添加了 2 个可见且活跃的产品 提交了用于 alpha
  • R 更改小数位且不四舍五入

    gt signif 1 89 digits 2 1 1 9 我想要1 8 这有点笨拙 但它会起作用并保持所有数字 x lt 1 829380 trunc dec lt function x n floor x 10 n 10 n Resul
  • Typescript Enum Object.values() 返回值

    为什么Object values and Object keys 总是同时给出键和值 考虑以下代码 enum Enum FOO BAR console log Object values Enum console log Object ke
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ValidationException:ExpressionAttributeValues 包含无效键

    我尝试在查询中使用 FilterExpression 过滤 DynamoDB 表扫描的结果 我正在使用部署在 AWS 上的 API Gateway 上的 Lambda 函数 查询端点的函数 Scan the table for entrie
  • Android中不同字体的不同TTF文件

    我想使用不同的字体样式 我将以下代码用于不同的字体样式 我怎样才能获得其他款式 我可以在同一个 ttf 文件中添加其他样式吗 在哪里可以获得不同字体的 ttf 文件 TextView txt TextView findViewById R
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • Netbeans 未安装在 MacOS Big Sur 上

    我已在 MacBook Air 上安装了 Big Sur Java 已安装 但 Netbeans 安装显示未找到 Java JDK 有人有这个问题的解决方案吗 我通过安装 JDK15 和 Apache Netbeans 12 2 仅限 12
  • 在Erlang中,当一个进程的邮箱增长较大时,它的运行速度会变慢,为什么?

    这是示例 test for gen server erl https github com wudixiaotie simple im blob master test test for gen server erl 当一个进程在其邮箱中收
  • Javascript中有&逻辑运算符吗

    我想知道Javascript中是否有 逻辑运算符 我尝试在 Firebug Firefox 中运行 1 0 和 1 0 它都返回 0 有人告诉我 C 接受 和 double double 效率更高 因为一旦遇到 false 它就会退出比较循
  • 在 log4j2.properties 中配置异步记录器

    我想在 log4j2 properties 文件中使一些记录器异步 在 xml 格式中 您可以添加为
  • 如何测试 google.maps.Geocoder?

    你好 我正在尝试编写一个 简单 测试来检查反应类组件状态更改 具体来说 我正在测试如果 Google 成功对我发送的某些字符串 地址 进行地理编码 lat 纬度 和 lng 经度 状态是否会发生变化 这是我想测试的示例 i e the la
  • 如何使用 Retrofit 2 一起发送文件和其他参数

    我正在寻找一个示例 如何将文件和其他参数一起发送到服务器 我必须发送服务器 JSON title title file uploaded file instance location lat 48 8583 lng 2 29232 plac
  • 在 OllyDbg 和 Assembler 中,EBP+8 是什么意思?

    我正在学习 OllyDbg 中的汇编和调试技巧 以便学习如何使用未记录的函数 现在我遇到以下问题 我有以下代码部分 来自 OllyDbg MOV EDI EDI PUSH EBP MOV EBP ESP MOV EAX DWORD PTR