欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

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

更新时间: 2014-01-05 03:17:47 责任编辑: Author_N1

 

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
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:47
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20510/
本文WWW.DOC100.NET DOC100.NET版权所有。