c++ vs2019中编写nasm

  1. 在项目中创建"xor.asm"
  2. 在文件列表"xor.asm"上右键,点击属性

  1. 将项目类型设置为"自定义工具"

  1. 设置生成工具

  1. 编写"xor.asm"
section .text
  global asm_xor

asm_xor:
  push rbp
  mov rbp,rsp

  xor ecx,edx
  mov eax,ecx

  mov rsp,rbp
  pop rbp
  ret
  1. 编写main.cpp
#include <iostream>

extern "C" int asm_xor(uint32_t, uint32_t);

int main()
{
  printf("%d\n", asm_xor(2, 1)); // 3
  return 0;
}

调用 MessageboxA 示例

extern MessageBoxA 

section .text
  global asm_msg

asm_msg:
  push rbp
  mov rbp,rsp
  
  sub rsp,32

  mov r8,rdx
  mov rdx,rcx
  xor rcx,rcx
  mov r9,3
  call MessageBoxA
  add rsp,32
  
  mov rsp,rbp
  pop rbp
  ret
#include <iostream>

extern "C" uint32_t asm_msg(const char*, const char*);

int main()
{
  uint32_t r = asm_msg("body", "caption");
  printf("%d\n", r); // 3
  return 0;
}

注: nasm中的数字默认是10进制

posted @ 2021-02-20 17:32  Ajanuw  阅读(526)  评论(0编辑  收藏  举报