2013-03-10 109 views
-1

我想將一個數組傳遞給用匯編寫的我的排序程序。我的代碼到目前爲止是:c傳遞數組到nasm函數

的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的 的extern printf的

myFunc: 
      enter 4,0 
      push ebx 

      push dword [ebp + 8] 
      call printf 

      pop  ebx 
      leave 
      ret 

這只是一些測試代碼來學習如何做到這一點。

我的理解是,這應該打印指向數組的指針,但我可能是錯的。

任何人都可以給我一個簡單的例子,將數組傳遞給程序集文件(NASM)。

謝謝!

+0

在您的程序集中,您在調用printf之前將指針值推入堆棧。但是我沒有看到你在推送一個格式化字符串。難道你不需要有效地將%x \ n「'推入堆棧嗎? – selbie 2013-03-10 04:25:53

回答

2

您打電話給printf,第一個參數是傳遞給myFunc的指針。這不會起作用 - 第一個參數必須是格式字符串。

儘管如此,代碼的其餘部分看起來還不錯。請注意,您將不得不將數組的長度傳遞給您的asm函數。

1

回答這些問題的最好方法是編寫一個簡短的函數,用於對C中感興趣的操作類型進行編譯,然後將其編譯爲程序集以進行逆向工程。