【发布时间】:2011-01-13 08:30:11
【问题描述】:
不知何故与此calling assembly functions from c相关
我正在向该函数传递一个整数数组和一个长度:
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));
然后它就被数据填满了。
【问题讨论】:
-
您确定
array包含有效的以'\0' 结尾的ASCII 字符串吗? -
array 被定义为 int *array;数组 = malloc ....;对于数组
-
需要问的愚蠢问题:您正在检查
malloc没有失败,对吧? -
如何打印值? *(int *)($ebp + 8) 是指向第一个元素的指针,因此(在 GDB 中)x/10x *(int *)($ebp + 8) 应该打印数组中的前 10 个值。
-
@diciu 我正在尝试将 %edx 放入堆栈并使用对 printf 的调用。 %edx 是 (%eax,%edi,4) 并且 %eax 应该是数组的地址。
标签: c assembly x86 gnu-assembler