【发布时间】:2016-09-03 19:47:54
【问题描述】:
今天正在练习从程序集中调用 fgets。
为了将 FILE* 传递给文件流,我写了mov rdx, [stdin]。
但为什么要放在方括号中?因为我不需要该指针的值,只需要指针本身。应该提一下,那个 lea rdx, [stdin] 也不起作用。我记得,它会导致 SIGSEGV 被发送到程序。
据我所知,mov 指令操作数中的方括号与 C 中的取消引用指针相同。另外我知道 libc 在运行时动态链接到我的可执行文件,并映射到程序的虚拟内存地址空间的堆栈和堆之间的某个位置.
YASM、glibc、Linux x64。
【问题讨论】:
-
@EmployedRussian:我在编辑时留下了 glibc 标签,因为它是关于
FILE *stdin的问题。 (当然,答案与此无关,但我可以想象另一个搜索相同问题的人认为这与 glibc 有关。)还有一个libc标签;那会更合适吗? -
@PeterCordes 但
FILE *stdin也与 GLIBC 没有太大关系:所有其他 libc 都提供了它。而且我认为libc标签也不会被调用:问题不在于库,而在于指针类型的全局变量。
标签: assembly x86 gdb dereference