首页 > 解决方案 > 如何使用 NASM 修改某些 C 指针指向的内存?

问题描述

我在 NASM 上编写了这段代码,在 c:int* ptrint val. 目的是设置ptr指向的内存val然后返回ptr

    section .text
       global _mptr
_mptr:
       mov ebx, [esp + 4]
       mov ecx, [esp + 8]
       mov [ebx], ecx
       mov eax, [esp + 4]
       ret

这是C代码:

#include <stdio.h>
extern int* _mptr(int* ptr, int val);
int main(void)
{
    int i = 0;
    int* ptr = &i;
    ptr = _mptr(ptr, 225);
    //I want to set i to 225 using _mptr.
    printf("%d\n", i);
}

我以这种方式编译程序:

nasm -f elf asmCode.asm

gcc -Wall -m32 program.c asmCode.o

在 Ubuntu 操作系统上。

当我用./a.out程序执行它时失败。

在汇编中访问某些 C 指针指向的内存的正确方法是什么?

标签: cpointersassemblynasm

解决方案


推荐阅读