如何解读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结构,但存在两个关键疑问:RUNTIME_FUNCTION中的ULONG类型字段是否需要使用相对偏移而非绝对地址?- unwind info是否必须与注入的可执行代码内存区域连续,才能保证ULONG偏移的有效性?
附相关资源
- 用于生成汇编的C代码
- 编译命令
- 编译生成的
listing.cod内容
内容的提问来源于stack exchange,提问作者Greedo
相关产品推荐
相关产品推荐

