将数组作为参数传递给 C 中的 x86 函数

维达

我有一个 bmp 文件,我在 ac 函数中读取它并将像素值存储为无符号整数。我想将这个无符号整数数组传递给 x86,但我失败了。这是我的c代码:

我有这个属性:

extern int func(char *a);
unsigned char* image;

我的主要方法是:

int main(void){
  image = read_bmp("cur-03.bmp");
  int result = func(image);
  printf("\n%d\n", result);
  return 0;
}

我检查了我的数组,它有真值。

这是我的 nasm 代码:

section .text
global  func

func:
    push ebp
    mov ebp, esp
    mov ecx , DWORD [ebp+8] ;address of *a to eax


    pop ebp
    ret

section .data
    values: TIMES   255         DB      0   

我希望 ecx 拥有我的数组的第一个元素,但我得到的不是它,而是1455843040地址?

这是 read_bmp:

unsigned char* read_bmp(char* filename)
{
    int i;
    FILE* f = fopen(filename, "rb");
    unsigned char info[54];
    fread(info, sizeof(unsigned char), 54, f); // read the 54-byte header

    // extract image height and width from header
    int width = *(int*)&info[18];
    int height = *(int*)&info[22];
    int heightSign =1;
    if(height<0){
        heightSign = -1;
    }

    int size = 3 * width * abs(height);
    printf("size is %d\n",size );
    unsigned char* data = malloc(size); // allocate 3 bytes per pixel
    fread(data, sizeof(unsigned char), size, f); // read the rest of the data at once
    fclose(f);

    return data;
}

我的最终目标是获取数组的元素(在 0 - 255 的区间内)并在我的 255 字节大小的数组中增加相应的值。例如,如果第一个数组中的第一个元素是 55,我将在 255 字节大小的数组中将第 55 个元素递增 1。所以我需要访问我从 c 传递的数组元素。

迈克尔·佩奇

当你有一个C原型时,extern int func(char *a);你正在传递一个指向a堆栈上字符数组的指针。您的汇编代码执行以下操作:

push ebp
mov ebp, esp
mov ecx , DWORD [ebp+8] ;address of *a to eax

EBP+8是一个内存操作数(在堆栈上),其中的地址a由调用函数放置。您最终a从堆栈中检索了指向(1455843040) 的指针。您需要做的是进一步取消引用指针以获取单个元素。您可以使用以下代码执行此操作:

push ebp
mov ebp, esp
mov eax , DWORD [ebp+8] ; Get address of character array into EAX
mov cl, [eax]           ; Get the first byte at that address in EAX. 

获取数组中的第二个字节:

mov cl, [eax+1]         ; Get the second byte at that address in EAX.

等等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么时候将指针作为参数传递给C ++中的函数?

来自分类Dev

将数组作为参数传递给pick中的函数

来自分类Dev

从函数内部将数组作为函数参数传递,该数组将其作为C中的参数

来自分类Dev

将匿名函数作为参数传递给Erlang中的函数?

来自分类Dev

将数组传递给C中的函数

来自分类Dev

将Java脚本函数作为参数传递给C ++函数

来自分类Dev

将3D数组作为参数传递给C中的函数

来自分类Dev

Swift无法将符合协议的类作为函数参数传递给Objective-C文件中的函数

来自分类Dev

如何将QVector作为可选参数传递给C ++中的函数?

来自分类Dev

x86程序集:通过堆栈将参数传递给函数

来自分类Dev

如果传递的函数也将函数作为参数,如何将函数作为参数传递给C中的函数?

来自分类Dev

C-无法将数组引用传递给函数中的指针参数

来自分类Dev

x86中的下划线前缀问题:从C ++函数调用NASM函数在x64中有效,但在x86中失败

来自分类Dev

将结构成员作为参数传递给C中的函数

来自分类Dev

将ServiceClientCredentials作为参数传递给C#中的构造函数

来自分类Dev

如何将整个numpy数组作为python中的参数传递给用户定义的函数?

来自分类Dev

将数组作为参数传递给C函数

来自分类Dev

x86 SIMD指令汇编中的16字节对齐(无C内部函数)

来自分类Dev

将对象作为参数传递给C ++中的函数

来自分类Dev

将参数传递给C中的可变参数函数

来自分类Dev

如何将常量数组作为参数传递给C ++函数/方法

来自分类Dev

将参数传递给bash函数中的python -c吗?

来自分类Dev

将数组作为参数传递给pick中的函数

来自分类Dev

在_start函数(x86 ASM)中作为局部变量写入堆栈

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

如何将参数传递给C中的函数指针?

来自分类Dev

将指向2D VLA的指针作为函数参数传递给C中的行向量

来自分类Dev

如何将float数组和float作为参数传递给C中的函数

来自分类Dev

在 C 中,将数组作为 *arr 和 *arr[] 传递给函数有什么区别?

Related 相关文章

  1. 1

    什么时候将指针作为参数传递给C ++中的函数?

  2. 2

    将数组作为参数传递给pick中的函数

  3. 3

    从函数内部将数组作为函数参数传递,该数组将其作为C中的参数

  4. 4

    将匿名函数作为参数传递给Erlang中的函数?

  5. 5

    将数组传递给C中的函数

  6. 6

    将Java脚本函数作为参数传递给C ++函数

  7. 7

    将3D数组作为参数传递给C中的函数

  8. 8

    Swift无法将符合协议的类作为函数参数传递给Objective-C文件中的函数

  9. 9

    如何将QVector作为可选参数传递给C ++中的函数?

  10. 10

    x86程序集:通过堆栈将参数传递给函数

  11. 11

    如果传递的函数也将函数作为参数,如何将函数作为参数传递给C中的函数?

  12. 12

    C-无法将数组引用传递给函数中的指针参数

  13. 13

    x86中的下划线前缀问题:从C ++函数调用NASM函数在x64中有效,但在x86中失败

  14. 14

    将结构成员作为参数传递给C中的函数

  15. 15

    将ServiceClientCredentials作为参数传递给C#中的构造函数

  16. 16

    如何将整个numpy数组作为python中的参数传递给用户定义的函数?

  17. 17

    将数组作为参数传递给C函数

  18. 18

    x86 SIMD指令汇编中的16字节对齐(无C内部函数)

  19. 19

    将对象作为参数传递给C ++中的函数

  20. 20

    将参数传递给C中的可变参数函数

  21. 21

    如何将常量数组作为参数传递给C ++函数/方法

  22. 22

    将参数传递给bash函数中的python -c吗?

  23. 23

    将数组作为参数传递给pick中的函数

  24. 24

    在_start函数(x86 ASM)中作为局部变量写入堆栈

  25. 25

    将指针传递给char数组作为函数的参数-C

  26. 26

    如何将参数传递给C中的函数指针?

  27. 27

    将指向2D VLA的指针作为函数参数传递给C中的行向量

  28. 28

    如何将float数组和float作为参数传递给C中的函数

  29. 29

    在 C 中,将数组作为 *arr 和 *arr[] 传递给函数有什么区别?

热门标签

归档