当你到达一个memcpy调用时,使用si(步进指令)进入汇编代码。只有在您拥有libc的调试版本和glibc源码的情况下,您才能获取源代码。如果您只想查看实现,请查看例如memcpy-ssse3.S或memcpy.S。
printf("Some constant string");
替换为puts("Some constant string");
)。 - vonbrandmemcpy
的罕见情况下(实际上只有在复制在可证明对齐边界上的常量大小小数据片段时才会发生)。更常见的是 GCC 在执行结构体赋值时插入调用memcpy
。 (吹毛求疵:如果常量字符串以\n
结尾,则它只使用puts
)。 - nneonneomemcpy
,或者在哪些确切情况下会这样做。此外,OP要求针对特定情况进行回答,但可能还想将答案应用于其他情况。或者有人可能会寻找类似的问题(和答案)。在C语言中,编译后的程序必须表现得好像函数调用和其他操作是按照写入的顺序完成的。如果编译器可以证明不同的代码始终产生相同的结果,则可以自由替换它。 - vonbrandmemcpy
,那么在GDB中使用si
仍然可以让您看到memcpy
的汇编代码 :) - nneonneo