You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解读xdata与pdata,手动构造RUNTIME_FUNCTION和UNWIND_INFO用于RtlAddFunctionTable?

运行时注入汇编的Unwind信息构造问题

背景与需求

  • 为绕过VBA运行时限制,计划通过运行时注入汇编代码实现功能
  • 最初手动编写汇编并使用fasm编译,但发现必须添加unwind codes(异常处理信息),手动实现该逻辑过于繁琐,因此改为编写C代码编译后提取汇编,再通过VirtualAlloc分配可执行内存区域注入,最后通过函数指针调用
  • 当前核心需求:将unwind信息注册到RtlAddFunctionTable。已知该信息存储在C代码编译后的xdata和pdata段中,但运行时注入场景无法直接依赖这些段;已获取xdata和pdata的原始内容,以及RUNTIME_FUNCTION和UNWIND_INFO的结构定义,需要明确如何解读pdata和xdata来构造这两个结构

当前尝试与疑问

  • 已从xdata原始数据01 06 02 00 06 32 02 30推断UNWIND_INFO结构,认为其中的函数序言长度为0x06
  • 假设通过VirtualAlloc分配的UNWIND_INFO内存地址为0x1122334411223344,可执行代码的基地址为0x1122334455667788,已尝试构造RUNTIME_FUNCTION结构,但存在两个关键疑问:
    1. RUNTIME_FUNCTION中的ULONG类型字段是否需要使用相对偏移而非绝对地址?
    2. unwind info是否必须与注入的可执行代码内存区域连续,才能保证ULONG偏移的有效性?

附相关资源

  • 用于生成汇编的C代码
  • 编译命令
  • 编译生成的listing.cod内容

内容的提问来源于stack exchange,提问作者Greedo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:58:17