Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将数组传递给外部汇编函数_C_Assembly_X86_Gnu Assembler - Fatal编程技术网

C 将数组传递给外部汇编函数

C 将数组传递给外部汇编函数,c,assembly,x86,gnu-assembler,C,Assembly,X86,Gnu Assembler,与此有关 我将向该函数传递一个int数组和一个长度: do_stuff_in_asm (array, len); 装配零件看起来像这样 ................... movl 8(%ebp), %eax movl 12(%ebp), %ecx movl $0, %edi ................... movl (%eax,%edi,4), %edx pushl %edx pushl $printtext call printf addl $8, $esp .........

与此有关

我将向该函数传递一个int数组和一个长度:

do_stuff_in_asm (array, len);
装配零件看起来像这样

...................
movl 8(%ebp), %eax
movl 12(%ebp), %ecx
movl $0, %edi
...................
movl (%eax,%edi,4), %edx
pushl %edx
pushl $printtext
call printf
addl $8, $esp
..................
我可以打印len参数12(%ebp),但每次我在%edx上尝试相同的操作时(它应该是数组的第一个元素),我都会遇到分段错误

int *array, n, i;

printf ("Give array size: ");
scanf("%d",&n);

array = malloc (n * sizeof(int));

然后它被数据填满。

你应该发布完整的代码。作为说明,我已经写了。注意,它只是内联asm,以便ideone可以从单个文件编译它。正如您所看到的,如果使用得当,您发布的代码确实有效。因此,问题一定是在您忽略的其他部分。

您确定
数组
包含有效的以“\0”结尾的ASCII字符串吗?数组定义为int*array;数组=malloc。。。。;对于需要询问的arrayStupid问题:您正在检查
malloc
是否没有失败,对吗?如何打印值*(int*)($ebp+8)是指向第一个元素的指针,因此(在GDB中)x/10x*(int*)($ebp+8)应该打印数组中的前10个值。@diciu我正在尝试将%edx放在堆栈上,并使用对printf的调用。%edx是(%eax,%edi,4),并且%eax应该是数组的地址。它与以下注释的行一起工作,即打印数组中的第一个值,但如果启用循环asm文件和C文件@void,则会失败:正如我在另一个问题上所评论的,允许调用函数更改eax、ecx和edx。因此,printf调用将破坏eax(事实上,它包含返回值),您必须重新加载它。我对edi和ecx照顾得太多了,以至于我忘记了eax,我是个白痴。谢谢