繁体   English   中英

学习 x86 和 windows 的 x64 程序集并将它们用作 exe 文件

[英]Learn both x86 and x64 Assembly for windows and use them as exe files

我想学习如何为windows编写汇编,然后将它们汇编成exe文件供个人使用! 我想知道我可以用于此任务的任何资源

我已经尝试使用教程并且它们有效,但我可以重新创建的大部分都是在 64 位程序集中,而我确实找到的 32 位程序集在 Windows 10 上不起作用。这可能是由于我缺乏经验。

我想了解如何在 windows 上同时使用 32 位和 64 位程序集以用于实际目的

我尝试了这个https://sonictk.github.io/asm_tutorial/#introduction/settingup.netwideassembler的教程(排序)并且确实让它工作但这是针对 x64

所以我找了更多的书籍和教程,但是没有找到。 我确实找到的书要么不够详细,无法详细说明他们如何执行某些步骤并迷失了我,要么太复杂了。

我在同一个论坛中查看了关于同一主题的许多主题,并尝试了其中的许多主题,但我做错了。

我能够弄清楚如何使用 NASM 提供 x86 object 文件,但是我无法弄清楚链接部分。

我尝试为此使用 gcc linker 但显然 gcc linker 是单个目标并且放置 -m32 给出了找不到某些 32 位库的错误。

如果需要学习,我愿意先在其他平台上学习汇编,但最后我想学习如何为 windows 创建 exe 文件

学习一个或另一个的基础知识,然后学习另一种模式的不同调用约定,以及 Windows 在 32 位而不是 64 位的符号名称前面放置前导_的事实。

先学习 32 位可能更简单; 没有 RIP 相对寻址,调用约定更简单:始终堆栈参数,没有寄存器参数或影子空间。 并且没有堆栈 alignment 要求。 唯一更复杂的是 cdecl(调用者弹出堆栈)与 stdcall(被调用者弹出堆栈)以及在 64 位模式下只有一个调用约定。 (在 Windows 上; 其他操作系统使用不同的操作系统。)

此外,已经编写了很多内容来向已经了解 32 位内容的人教授 64 位模式,因为 x86-64 晚于 386。

因此,作为起点,在 Windows 上寻找 32 位模式的 NASM 教程。一旦您了解了目标文件格式和工具的一些情况,当您寻找 64-位教程。

NASM 是一个不错的选择; 它不会做很多奇怪的“魔术”,比如发明您没有像 MASM 那样编写的指令,也不会将操作数大小与某些数据相关联。 它只是照你说的做。 使用调试器单步执行代码并查看寄存器 & memory; 这是一个必不可少的学习工具,可用于了解指令的工作原理,以及找出您的代码为何未按预期运行的原因。

https中有一些链接://stackoverflow.com/tags/x86/info

顺便说一句,我建议从 16 位 DOS 开始。 16 位模式的额外限制使事情变得更加复杂,例如分段和非正交寻址模式(只有一些寄存器可以作为指针取消引用)。 缺少符号扩展/零扩展 mov 以及其他缺失的指令,导致代码笨拙,这不是您在现代机器上真正做事的方式。 此外,DOS 系统调用与 WinAPI 或 ISO C 库函数有很大不同,因此要执行任何操作,您需要在其上构建一个完全不同的界面,与您可能已经使用的 WriteFile 等 API 相比,所有这些都几乎无用熟悉并且仍然与现代程序相关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM