首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

IDA里的large啥意思?该如何处理

2013-06-19 
IDA里的large啥意思?在IDA里看到的代码,里面的large什么意思?查都查不出来.text:0040111Fpushlarge dword

IDA里的large啥意思?
在IDA里看到的代码,里面的large什么意思?查都查不出来
.text:0040111F                 push    large dword ptr fs:0
.text:00401126                 mov     large fs:0, esp


[解决办法]
对这个不太了解。大致在 ida 里看了下,发现其为内存地址大小的说明。通常地,由于内存管理上的安全性考虑,低 64KB 范围内是不被分配的,即直接地址应该是高于 1 个 word 的表示范围;但这里 SEH 框架是例外,其直接地址可以被 1 个 word 表示时,通过 67h 这一地址大小前缀指令,可用将整个指令减少一个字节的长度,而 large 却是说明使用的不是这样的模式,而是简单的 32 位模式下的 32 位的直接地址,即便这个地址可用被 16 位表示。
说的自己看着好像都比较乱,可能你在 ida 里 "Option"."General..." 对话框里将 "Number of opcode bytes" 设置到 8 ,再看看直接寻址模式的指令里,有 large 和没有 large 修饰的那些指令,其机器码上的区别就会比较明白了。
不知道为什么 SEH 这里不能使用 67h 修饰了的精简指令模式呢?
[解决办法]
你好楼主,这个large应该是IDA自己添加的,这段代码应该是有关结构化异常处理的。
FS段寄存器用于访问线程的线程环境块,也就是通常说的(TEB), 第二句中 FS:0用于插入处理程序的SEH(结构化异常处理)链,后引发一个异常。有关SEH,你可以参考一下 罗云彬的32位汇编编程的 第14章 异常处理。 你其实你直接忽略large就可以了,在逆向中它还是会被改写为

push  fs:[0]
mov  fs:[0], esp

热点排行