8B EC 56 8B F4 68 00 70 40 00 FF 15 BC 82 40
Run Code Online (Sandbox Code Playgroud)
像上面这样的序列可以用各种方式进行分段,每个段都可以转换为相应的汇编指令,但是每个二进制可执行文件都有它唯一的DEFINITE汇编,什么是避免歧义的数学原理?
UPDATE
大多数选票的答案实际上并没有回答我的问题.
出于兴趣,我想在机器代码中编写一个小程序.
我目前正在学习寄存器,ALU,总线和内存,我有点着迷,指令可以用二进制而不是汇编语言编写.
是否需要使用编译器?
最好是在OSX上运行的.
68000内部是如何表示指令的。我读过有不同类型的指令:单个有效操作字格式指令、简短和完整扩展字格式指令。单条有效的操作字指令似乎代表指令,该指令的低6位代表寻址方式和寄存器。这种寻址模式和寄存器是否会告诉您是否有一个简短的或完整的扩展字格式指令,该指令又代表该指令的操作数。你知道比 68000 编程参考手册更好的手册吗?
提前致谢
我刚刚发现 push 指令可以有一个立即数 byte 、 word 、 dword 参数,并且每个参数都有不同的操作码。我正在阅读的书中没有示例,所以我不明白汇编程序如何区分这三种类型。例如,如果我编写push 12h汇编器将如何解释它以及堆栈上实际会发生什么?
在跳转指令中,
我最近开始使用 ASP.NET 和一些 Javascript 进行 Web 开发,但有些事情让我很困惑。
我总是读到 JavaScript 过去是被解释的,直到 JIT 慢慢地把它编译成机器代码(这使得浏览器更快)。
这对我来说毫无意义。如果传统 JavaScript 应用程序一开始就不针对机器/CPU,那么 JavaScript 如何编译为本机机器代码?
我了解 Electron.js 应用程序是否使用 NodeJS 运行时编译为机器代码。我明白了。因为它本身编译为机器代码,并且据我了解,它不在浏览器中运行。
如果传统的 JavaScript 应用程序在浏览器中运行,为什么必须将其编译为机器代码?浏览器负责运行代码,而不是CPU。CPU 本身运行浏览器。实际上,我根本不明白本机操作系统如何影响浏览器中发生的任何事情,反之亦然。似乎也是一个安全问题。
抱歉,如果这是一个愚蠢的问题,但我找不到任何超出“Javascript 使用 JIT”的资源
谢谢你!
劳伦
我只是想知道,如果任何语言的所有编译器都将代码转换为计算机内容中唯一的"谈话"语言(机器代码 - 零和1),为什么将.NET Windows应用程序传递到Mac应用程序这么难?
不应该有人带来一个绝妙的主意(自从我3年前结婚以来,我没有出色的想法!)并且有...我不知道...机器代码框架所以,而不是编译器转换为机器代码,它将转换为该框架,将安装在任何平台(SuSE,fsb,Ubuntu,AIX,SCO,OS X,Windows 9x,Vista,7等等).
我想知道为什么我们不能做这么容易的事情,这些天......
有什么想法吗?
我有两个汇编代码,如下所示
file:a.asm
section .text
global _start
_start: mov eax, 4
mov ebx, 1
mov ecx, mesg
mov edx, 10
int 0x80
mov eax, 1
int 0x80
mesg db "KingKong",0xa
Run Code Online (Sandbox Code Playgroud)
和另一个汇编代码
档案:b.asm
section .text
global _start
_start: jmp mesg
prgm: mov eax, 4
mov ebx, 1
pop ecx
mov edx, 10
int 0x80
mov eax,1
int 0x80
mesg: call prgm
db "KingKong",0xa
Run Code Online (Sandbox Code Playgroud)
在获取这两个代码的十六进制并将其放入此C包装器之后
char *b = "\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\xb9\x7d\x80\x04\x08\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xcd\x80\x4b\x69\x6e\x67\x4b\x6f\x6e\x67\x0a";
char *b = "\xe9\x19\x00\x00\x00\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\x59\xba\x0a\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xcd\x80\xe8\xe2\xff\xff\xff\x4b\x69\x6e\x67\x4b\x6f\x6e\x67\x0a";
int main()
{
(*(int (*)(void))a)();
}
Run Code Online (Sandbox Code Playgroud)
第一个汇编代码(b)按预期打印'KingKong',但第二个汇编代码a …
我正在编写一个调试器,并且当多个线程同时击中它们时,当前正试图使断点可靠地工作.据我所知,大多数调试器通过用0xCC替换指令的第一个字节来实现断点,这也是我目前正在做的事情.但是,我没有看到任何恢复原始字节的方法,同时仍然能够阻止其他即将命中该断点的线程,而不会停止所有正在运行的线程.有没有人知道通常如何实现?暂停所有线程真的是唯一的解决方案吗?
machine-code ×10
assembly ×6
x86 ×3
68000 ×1
breakpoints ×1
c++ ×1
callstack ×1
compilation ×1
debugging ×1
frameworks ×1
javascript ×1
jit ×1
math ×1
mips ×1
motorola ×1
opcode ×1
shellcode ×1
x86-64 ×1