问题标签 [machine-code]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3179 浏览

c - x86 E8 和 FF 调用,如何“即时”找到 E8 移位地址?基本的 x86 ASM 调用

我在这里使用二进制混淆,所以有一个充满操作码的缓冲区,而且我使用的是 Linux,所以,所有函数调用都使用相同的调用者/被调用者约定,这里没有问题。

我的问题是关于 E8 操作码,此操作码使用相对地址进行近距离调用。

我的问题是:我知道呼叫来自的地址,我知道我必须呼叫的地址,那么,我怎样才能找到我必须在 E8 呼叫中输入的班次地址?这是:

所以在我的缓冲区中,我有:

我需要用一个有效的指向 srand 的指针替换,我怎样才能从我拥有的东西中获取相对地址?

我只是认为我可以使用 FF 指令直接调用,但我不知道如何做到这一点。我无法将地址复制到(比如说)$eax,因为我不能在替换中放置超过 5 个的操作码(它会使上面的所有 jmp 调用都变成香蕉),而且我不明白是否有办法直接调用 5 个字节。

因此,如果有人知道如何获得正确的值来替换 E8 相对移位地址,或者如果有办法进行某种直接调用,保持与 E8 调用相同的功能属性并且只使用 5 个字节......

(在询问之前,我尝试将 FF XX XX XX XX 设置为 XX 作为真实地址,但它不起作用,x86 看起来不像是一个调用,它解释为一个 INC(???)和一些随机之后的事情我尝试以这种方式替换:

并将我找到的地址放入 E8 呼叫。无论如何它都没有用。

0 投票
2 回答
3125 浏览

c++ - 与零比较时的 int 运算符 != 和 ==

我发现 != 和 == 并不是测试零或非零的最快方法。

编译器:VC++ 11 优化标志:/O2 /GL /LTCG

这是 x86-32 的汇编输出。两个比较的第二个版本在 x86-32 和 x86-64 上都快了约 12%。但是,在 x86-64 上,指令是相同的(第一个版本看起来与第二个版本完全相同),但第二个版本仍然更快。

  1. 为什么编译器不在 x86-32 上生成更快的版本?
  2. 当程序集输出相同时,为什么第二个版本在 x86-64 上仍然更快?

编辑:我添加了基准测试代码。零:1544 毫秒、1358 毫秒非零:1544 毫秒、1358 毫秒 http://pastebin.com/m7ZSUrcPhttp://anonymouse.org/cgi-bin/anon-www.cgi/http://pastebin.com/m7ZSUrcP

注意:在单个源文件中编译时定位这些函数可能不方便,因为 main.asm 很大。我在单独的源文件中有 zero1、zero2、nonZero1、nonZero2。

EDIT2:安装了 VC++11 和 VC++2010 的人可以运行基准测试代码并发布时间吗?它可能确实是 VC++11 中的一个错误。

0 投票
1 回答
1260 浏览

byte - 破解一些 exe 文件 - 如何删除字节

今天我试图从 EXE 文件中删除一些字节。

在 EXE 中,我找到了 EXE 需要加载的文件的路径。我想更改路径,为此我必须删除一些../../字符。当我这样做并保存文件时,它会丢失它的图标,并且当我尝试执行它时会显示“win32 未知格式错误” 。

如果我不删除这些字节而是将它们替换为0,则图标不会丢失,并且文件看起来正确。然而,路径不正确。

因此,看起来当我删除字节时,文件内其他信息的位置丢失了,包括资源(图标)。删除这些字节后,我需要添加其他 6 个字节,以保持其他数据的大小和位置相同。我应该在哪里做?如果我在文件末尾添加这些字节,它就不起作用。你能给我一些线索吗?谢谢!

0 投票
2 回答
2169 浏览

php - 机器码和操作码有什么区别?

这个问题主要与 PHP 有关,因为恕我直言操作码大多是在 PHP 上下文中提到的。根据这个描述,下面是一个php代码到opcode的转换过程:

php 文本 -> 扫描/解析 -> 结果 = 令牌 -> 编译 > 结果 = 操作码

这里有几个问题:

1)操作码只是机器码的一部分,机器码是否由操作码组成?2)在Wamp服务器的上下文中思考,PHP模块负责什么?该模块只是将 PHP 代码转换为令牌的 PHP 解释器,还是将令牌编译为在硬件(处理器)上执行的操作码的编译器?

0 投票
1 回答
92 浏览

cpu-architecture - 运行时指令检测

我想识别和分析在整个代码运行过程中执行的不同机器指令和每个指令所需的时钟周期。

有没有办法简单地做到这一点?动态二进制翻译可能是一种方式,但我正在寻找更简单的机制。

提前致谢

0 投票
2 回答
888 浏览

debugging - 在我的汇编代码中找不到错误

我是汇编语言的初学者。我正在使用“easy 68k editor/assembler”编写 68k 汇编代码,该代码要求用户输入 2 个值,然后将它们汇总在一起并显示出来。问题是我的代码不断停止,我不知道如何解决/调试这个问题。

谁能帮我弄清楚如何追踪错误?我会很感激。先感谢您。

0 投票
1 回答
203 浏览

assembly - 从汇编代码到机器代码的旅程

我无法完全理解的是,我们在计算机中键入并从屏幕上读取的内容如何变成计算机可以使用和执行的内容。即使在汇编等最低级语言中,我也读到“汇编是高级语言与实际机器代码本身之间的桥梁”。但这真的是如何工作的。如果计算机只能根据高低信号进行操作,我们如何编写一个可以根据字母数字和符号进行操作的编译器。这些代码串实际上如何成为通过晶体管栅极发射的高低信号?当您键入一个键时,实际上是存储在计算机某处的寄存器中的一系列信号' s 电路?这是否也会将该字符的信号发送到屏幕上,或者当您按下一个键时,这是一个完全独立的过程?

0 投票
4 回答
12497 浏览

assembly - 汇编是唯一的低级编程语言,如果不是,它是最广泛使用的吗?

我最近开始学习汇编,当我浏览互联网时,我看到越来越多的人说汇编不是无用的,但与需要这么多时间和精力的语言相比,也不值得花时间去编写程序。高级语言。高级语言程序和低级语言程序之间的效率现在真的不够引人注目吗?还有另一种像汇编这样使用更广泛的低级语言吗?

0 投票
6 回答
35095 浏览

windows - 如何手动编写和执行 Windows .exe(使用十六进制编辑器的机器代码)?

我想知道如何仅通过使用十六进制编辑器来编写像 Hello World 程序这样简单的东西。我知道我可以在接近机器级别使用汇编程序和汇编语言来实现这一点,但我只想尝试在 Hello World 等玩具示例中真正编写机器代码。

这可能是一个简单的 DOS .COM 文件,我可以在 DOSBox 上运行。但是,如果有人可以提供一个 .EXE 文件的示例,以便直接在我的 Windows PC 上运行它,那就太好了。

这只是纯粹的好奇。不...我不打算直接用二进制机器代码编写程序(我什至不经常编写汇编代码,我大多数时候只是使用 C/C++ 作为我最底层的工具)。我只是想看看是否有可能做到这一点,因为可能有人在计算机的早期就必须这样做。

PS:我知道关于这个主题有类似的问题,但没有一个提供有效的例子。我只想要一个简单的例子,这样它就可以帮助我理解编译器和汇编器是如何生成可执行文件的。我的意思是......过去必须有人为第一个程序手动完成此操作。此外,对于 Windows EXE 格式,肯定有人在 Microsoft 编写了第一个工具来生成格式以及 Windows 本身读取并执行它的方式。

0 投票
3 回答
949 浏览

performance - 为什么 JIT 语言仍然比原生 C/C++ 更慢且内存效率更低?

解释器做了很多额外的工作,因此它们最终比本地机器代码慢得多是可以理解的。但是 C# 或 Java 等语言有 JIT 编译器,据说可以编译为平台本机机器代码。

然而,根据似乎足够合法的基准,在大多数情况下,仍然比 C/C++ 慢 2-4 倍?当然,我的意思是与同样优化的 C/C++ 代码相比。我很清楚 JIT 编译的优化优势以及它们生成比优化不佳的 C+C++ 更快的代码的能力。

在所有关于 Java 内存分配有多好的噪音之后,为什么会有如此可怕的内存使用?2 倍到 50 倍,平均而言,在该特定基准套件中使用的内存增加了大约 30 倍,这没什么好打喷嚏的……

请注意,我不想开始 WAR,我询问的是定义这些性能和效率数据的技术细节。