一些编译器会在函数中或函数之间添加无用的字节。在下面 0040117C 的代码块中,我们可以看到 IDA 插入的“align”关键字。
.text:00401176 mov eax, [edx+4]
.text:00401179 call eax
.text:0040117B
.text:0040117B locret_40117B: ; CODE XREF: sub_401160+Dj
.text:0040117B retn
.text:0040117B sub_401160 endp
.text:0040117B
.text:0040117B ; ---------------------------------------------------------------------------
.text:0040117C align 10h
.text:00401180
.text:00401180 ; =============== S U B R O U T I N E =======================================
.text:00401180
.text:00401180 ; Attributes: bp-based frame
.text:00401180
.text:00401180 ; int __stdcall sub_401180(void *Src)
如果我们在这个例子中以十六进制模式查看它,我们会看到“ CC CC ..
”。对于其他编译器,我们可能会看到“ 90 90 ..
”。其用途的明显暗示是“align”关键字。
问题:如何判断某个地址的特定字节是否align
在 IDAPython 中标记为?示例代码将不胜感激。
我发现了一些函数和数据类型,例如FF_ALIGN
和idaapi.is_align_insn(ea
看起来是肯定的,但我还没有找出一个工作示例或结果来确认是或否。我更愿意依赖 IDA 类型或函数,而不是对关键字“align”使用字符串解析。