- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
x86 反汇编器如何知道在哪里分解指令?
我在看 8088指令系统。例如,移动指令有 7 种变化,范围从 2 到 4 个字节。指令本身似乎没有遵循特定的顺序。 Why is x86 ugly?的另一个原因.
例如:
76543210 76543210 76543210 76543210
reg/mem to/from reg 100010dw ||regr/m
imm to reg/mem 1100011w ||000r/m dat dat w=1
imm to reg 1011wreg data dat w=1
imm to accum 1010000w addr-low addrhigh
accum to mem 1010001w addr-low addrhigh
reg/mem to seg 10001100 ||0ssr/m
seg to reg/mem 10001100 ||0ssr/m
Legend:
||=mod {NO-DISP=0,DISP-LOW,DISP-HIGH,REG}
ss=seg enum{es=0,cs,ss,ds}
reg=enum{ax=0,bx,cd,dx,bx,sp,bp,si,di (if w=1)} enum{al,bl...} (if w=0)
r/m=reg or mem (mod=3 then REG, else mem)
76543210 76543210 76543210 76543210
push 11111111 ||110r/m
inc 1111111w ||000r/m
最佳答案
查看我的 8086/8088 用户手册程序员引用 (ISBN 1-55512-010-5),可能已经绝版了几十年……附录 A 显示了按操作码顺序 0b00000000 到 0b11111111 的指令解码。看起来一点都不困惑。 add、sub、and、xor、cmp 等都以这样的方式分组,即多路复用器可以直接使用操作码位来路由输入和输出,而其他位选择 alu 对这些位执行的操作。
编写反汇编程序时,您希望使用这种表格或操作码表来对指令进行顶级排序。
在您的特定示例中,请注意每当您看到第一个操作码为 0xFF 时,第二个字节中间的三个位会告诉您故事的其余部分是哪条指令。所有这 8 种组合(一种是未定义的)都可以从这 3 位中表示并轻松解码。
是的,x86 指令集很疯狂。有趣和有趣的功能,但后来发明了更好的指令集。例如,x86 没有像 6502 那样走的唯一原因是动力,而不是质量。
你也应该看看这个:
How are hex sequence translated to assembly without ambiguity?
如何反汇编这个和任何其他可变字长指令集是按执行顺序进行的。如果您尝试按地址顺序线性地执行此操作,则会失败。从向量表开始获取入口地址,然后按照地址顺序遵循这些指令,记下并遵循所有分支,直到遇到无条件分支或返回或其他终止该指令串的指令。对每个分支目标重复此操作。这不会涵盖所有可能的指令,因为代码可能会在执行时计算地址(对于反汇编你无能为力)。
如果此代码中的任何一个是有意或无意地手写以绊倒反汇编程序,您可能会发生冲突,其中基于一个执行路径的一个操作码的第二个或第三个字节似乎是基于不同执行的指令的第一个操作码小路。例如,清除标志指令后跟条件分支(如果标志清除),接着是一个字节的数据,然后是作为分支目的地的实际指令。是的,我遇到过这个。它应该被您的反汇编程序捕获,您需要检查以在它们发生冲突时停止反汇编其中一个或两个执行路径。对于完整的反汇编,期望必须支持某种用户输入以将地址排除为操作码,以及让用户手动添加有效的操作码以便您遵循执行路径。
对于固定长度的指令集,您可以轻松地按地址或执行顺序进行反汇编,您的选择,从0到内存末尾的地址顺序当然是最简单的。不要在未定义的指令上出错,只需将它们标记为这样并继续前进,其中一些是数据。
x86 绝对是我尝试反汇编的最后一个可变长度指令集,并且我已经编写了许多反汇编程序。不想尝试那个项目。从一些固定长度的开始,比如图片和 ARM /拇指。尝试可变字长的 msp430,然后是 6502(小行星、小行星豪华版、月球着陆器等)。也许一两个星期的晚上来涵盖上述内容并获得感觉,然后如果愿望仍然存在,则攻击 x86。如果您将自己严格限制在 8088/8086 上,那还不错,需要确保您的工具正在生成这些指令,而不是进入 386 上的指令。
如果 push vs inc 困扰您,请务必先尝试其他类似 msp430 的东西。
关于assembly - x86 程序集 : How do Disassemblers know how to break up instructions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3983735/
是否有效率偏好以下控制流选项之一用于循环或切换另一个? 选项 1: switch(...){ case 1: if (...) { ... } else if
我需要在某个地方修复一些 CSS,因为我的文本没有环绕,如果它是一个非常长的单词,它会无限期地继续下去。 在大多数情况下,我在我的 CSS 文件中尝试了 word-wrap: break-word;
这个问题在这里已经有了答案: What is the difference between "word-break: break-all" versus "word-wrap: break-word
我的问题: overflow-wrap: break-word 和 word-break: break-word 有区别吗? 非重复: 这里有一些现有的问题,乍一看可能是重复的,但实际上不是。 Wha
我目前想知道两者之间有什么区别。当我同时使用它们时,如果它不适合容器,它们似乎会打破这个词。但为什么 W3C 做了两种方式来做呢? 最佳答案 word-wrap: break-word 最近更改为 o
满足条件时如何跳出循环? 例如: for (i in 0..10){ if (i==3){ // equivalent of break } } 最佳答案 Q#没有中
CSS3 规范说部分支持 word-wrap:break-word; 在 Chrome 中你必须使用 word-wrap:break-all; 但是没有连字符。我正在使用 text-align:jus
我想在我的 View 列表中显示来自数据库的所有评论。但有时,评论会很长。我试图用 word-wrap:break-word 来“打破”它们,但没有结果——像这样的评论 aaaaaaaaaaaaaaa
我正在尝试将一个长 URL 放置在侧边栏中,以在表格单元格宽度的范围内中断和换行。我已将 style="word-break:break-all;" 添加到 td 和围绕文本和 URL 的 span
我有以下代码: public void post(String message) { final String mess = message; (new Thread() {
是否有 word-break: break-word 的 alternative 可以在 firefox 中使用? 在 firefox[版本 57.0] 中 在 Chrome [版本 62.0.320
在this question以及this blog ,其中提到了样式 word-break 及其值。此外,还有值 break-word 作为属于例如的东西。 自动换行类。 在最近的 VS 中 MVC
我正在尝试将文本包装在 td 中并使用以下样式 word-break:break-all 在 IE 中工作得很好,但在 Firefox 中失败,请注意这是不支持的!尝试了 http://petesbl
我正在使用“word-break: break-all”在任何字符之间插入分隔符。 但是,在 Chrome 中,它无法正常处理特定字符(例如冒号、分号、逗号),如下所示。 (我的代码笔在这里:http
它只有在我用不同的元素包裹 anchor 标记时才有效,但我正在阅读 html,所以我想将它添加为整个页面的样式。 最佳答案 我不确定你想在这里实现什么,如果你能分享一些代码片段会很好。 无论如何,我
这些看起来都是一样的,有什么区别? https://jsfiddle.net/pmuub8w1/2/ p{ word-break:normal; } p{
目前下面的代码,保持div宽度固定,换行由于break-all .Test{ float: left; margin-bottom: 2px; word-wrap:break-word; word-b
我正在使用 word-break: break-all; 并想知道如何让浏览器自动插入 hyphens ,如 MDN example 中所示. div { width: 80px; heigh
我的 html 有这种结构: content1 content2 content3 content4 content5 content6 co
我正在尝试对齐图像旁边的文本。我想考虑没有空格的长字符串。 我的css如下 .new_item { width: 100%; float: left; border-bottom: 1px solid
我是一名优秀的程序员,十分优秀!