【问题标题】:c pass array to nasm functionc 将数组传递给 nasm 函数
【发布时间】:2013-02-25 11:11:00
【问题描述】:

我正在尝试将一个数组传递给我用汇编编写的排序程序。我到目前为止的代码是:

main.c:

#include <stdio.h>

extern void myFunc(int * somedata);

int arr[5] = { 3, 2, 33, 11, 1};

void main(){
    int i;
    myFunc(arr);
    for(i = 0; i < 5; i++)
    {
    //      printf( "%d\n", arr[i] );
    }
}

myFunc.asm:

部分 .text 全局 myFunc 外部 printf

    myFunc:
            enter   4,0
            push    ebx

            push    dword [ebp + 8]
            call    printf

            pop     ebx
            leave
            ret

这只是一些测试代码,用于了解如何执行此操作。

我的理解是这应该打印指向数组的指针,但我可能错了。

谁能给我一个将数组传递给程序集文件(NASM)的简单示例。

谢谢!

【问题讨论】:

  • 在您的程序集中,您在调用 printf 之前将指针值压入堆栈。但我看不到你在哪里推送格式化字符串。您实际上不需要push "%x\n" 到堆栈上吗?

标签: c arrays assembly nasm


【解决方案1】:

您正在调用printf,第一个参数是传递给myFunc 的指针。这是行不通的——第一个参数必须是格式字符串。

不过,您的其余代码看起来还不错。请注意,您还必须将数组的长度传递给您的 asm 函数。

【讨论】:

    【解决方案2】:

    回答此类问题的最佳方法是编写一个简短的函数来执行您对 C 语言感兴趣的操作类型,然后将其编译为汇编以进行逆向工程。

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2013-06-26
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多