在Windows平台上学习汇编语言编程的任何资源?

9

我想学习Windows汇编编程。但是我在寻找学习材料时遇到了一些问题。所有我看到的材料都没有足够的编程代码(只展示片段),要么过时,要么只是理论。


你有检查过当地的公共图书馆吗?这些年来已经出版了很多书籍。 - jcomeau_ictx
就像我之前所说的,我已经检查过了,但是我发现大部分材料都太理论化了,或者没有展示足够的代码。我想要一些能够提供完整源代码示例的东西。 - Victor
你需要更具体地说明你想要什么以及你已经找到了什么。你是否已经了解基本的/DOS汇编语言?你想要用汇编语言编写Windows控制台程序吗?你想要编写GUI程序吗?你尝试过打印“Hello World”在一个简单窗口中的HelloWin.asm示例吗?你是否有WINDOWS.INC及其类似文件?在谷歌上搜索“windows assembler”会返回一个相当不错的PDF,其中包含了很好的示例。The Art of Assembly也包括Windows编程。 - Synetech
我可以是控制台或GUI。我想学习Windows汇编语言,以便学习反汇编和逆向工程,解决可执行文件的问题。 - Victor
如果他已经了解汇编语言,HLA可能不是最好的选择。 - Mike Kwan
显示剩余2条评论
3个回答

8
长期以来,对于Windows汇编编程的初学者而言,“标准”的教程是Iczelion's tutorial。同样针对Windows汇编编程,我个人认为最好的入门论坛可能是MASM32。它拥有非常活跃的社区,对新手和初学者非常友好和乐于助人。这在一定程度上取决于你想要学习哪种汇编语言,但我个人认为,对于初学者而言,Windows MASM32具有最好的用户基础(无论是社区还是资源方面)。
你提到你也想学习RCE(反向代码工程),在Windows上进行反向工程的一个非常常见的起点是lena151's tutorials,如果你已经从事过Linux汇编编程并对汇编概念有所了解,那么这也可能是一个不错的开始。

lzcelion的教程目前不可用 :-( - yegle
@yegle:试一下这个镜像站点:http://win32assembly.programminghorizon.com/tutorials.html - Mike Kwan

5

大部分汇编语言编程,特别是在像Windows这样的完整操作系统环境下,通常只需要编写一些代码片段而不是完全使用汇编程序。最简单的方法是编写一个C程序作为测试框架,然后让它调用你的汇编语言函数。以下是一个简单的示例:

asm.s:

  .text
  .globl _asm_add

_asm_add:
  mov %rdi, %rax
  add %rsi, %rax
  ret

example.c:

#include <stdio.h>

int asm_add(int, int);

int main(int argc, char **argv)
{
  int a = 12;
  int b = 6;

  int c = asm_add(a, b);

  printf("%d + %d = %d\n", a, b, c);

  return 0;
}

在我的Mac上使用clang进行构建和运行(在Windows上修改为您的编译器):

$ clang -o example example.c asm.s
$ ./example 
12 + 6 = 18

1
@Victor,那么有什么区别吗?同样的程序在Windows上和Linux或Mac上运行完全相同(无论如何,在交换rdirsircxrdx之后)。 - Carl Norum
1
不同的操作系统有不同的调用系统服务的方式,例如打开文件、输出到屏幕等。 - Victor
@Victor,但那只是函数调用。你的意思是你不想链接到Windows库吗? - Carl Norum
我想链接到Windows库,但如果函数调用不同,我怎么知道该如何调用它们? - Victor
3
@Victor,您可以从汇编程序中调用与C程序相同的函数。听起来更像是您需要了解Win32 API而不是汇编语言。也许我误解了您的问题? - Carl Norum

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接