c - 如何使用 malloc 在 NASM 程序集中创建一个新的字符数组

标签 c arrays pointers assembly nasm

给定这个 C 代码:

char** names=(char**)malloc(count*sizeof(char*));

我想将它转换为 NASM 汇编代码。这是我尝试过的,但代码崩溃了:

  mov eax, dword count
  mov ebx, [eax*4] ;; i did times 4 because we clear stack by 4 bits or bytes?
  push ebx
  call _malloc
  mov names, eax
  add esp, 4

sizeof(char*) 是什么意思?代码寻址哪个字符指针?

最佳答案

它崩溃的原因是因为 mov ebx, [eax*4] 正在访问地址 eax * 4 的内存,这不太可能是有效的,而且绝对不是什么无论如何你想要。要乘以 4,您可以使用 lea ebx, [eax*4]shl eax, 2 然后使用 push eax

PS:学习使用调试器。

关于c - 如何使用 malloc 在 NASM 程序集中创建一个新的字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098278/

相关文章:

c - 如何使用指向字符数组的指针一次访问一个数组元素?

c++ - 通过使用来自同一类 C++ 的函数内部的指针 vector 访问数据

c++ - 递归取消引用指针

javascript - "Array.prototype.slice: ' IE8中这个' is not a JavaScript object"错误

c - 请解释这段代码在做什么(someChar - 48)

C - 在字符串上使用 scanf 获取数字

c - 如何使用 VBO 绘制三角形?

c - 我正在尝试利用缓冲区溢出,我做错了什么吗?

python:如何扩展具有相邻重复列的 numpy 数组?

arrays - 将 float64 数组转换为 float32 数组