程序集malloc是一个堆栈数组



我正在混合C和汇编,并将其发送到汇编:

extern int Fill(int** arr, int n);

如何动态分配大小为n的数组(应该在后面的**arr中),并用数字1填充数组。(小型,.386)

如果分配失败,则返回0。否则,它只需将其分配并粘贴到[bp+4],然后用数字1填充。

您没有提到您使用的操作系统或编译器。

对于386,小型和扁平型应该相同。如果这是一个选项,您可能希望使用.model small,c或.model flat,c,这样您就不必在名称前加上_,这取决于编译器和汇编程序。

假设使用帧指针的标准调用约定(ebp被推到堆栈上):

        mov     eax,12[ebp]          ;n
        push    eax
        call    malloc               ;or maybe _malloc
        add     esp,4

如果使用fastcall,则前两个参数在寄存器中。哪些寄存器取决于操作系统/编译器。

如果遇到问题,请用C或C++编写代码,然后让编译器输出汇编代码,以便查看名称和函数的调用方式。

"malloc a stack array"?堆栈分配是malloc的相反类型的分配。它很快,但当函数返回时就释放了。

如果需要分配将返回给调用者的内存,则需要使用malloc(即对malloc库函数进行函数调用)。

或者,如果传递指针的代码不指向free(3),则可以直接使用mmap(MAP_ANONYMOUS)

使用rep stosd填充它以存储32位(双字)整数。(或者,如果您关心具有慢速rep stosd(AMD预推土机)的旧CPU的性能,请使用SSE矢量存储。)有关许多有用的链接,请参阅x86 wiki。

相关内容

  • 没有找到相关文章

最新更新