如何获取Cython函数neumaier_sum对应的汇编代码?
提取Cython函数对应汇编代码的方法
方法1:用objdump精准过滤函数
- 先编译Cython代码:
cython -3 your_file.pyx && gcc -c -fPIC -I/usr/include/python3.x your_file.c
(把python3.x换成你的实际Python版本,比如python3.10)
2. 找到编译后函数的真实名称:
nm your_file.o | grep neumaier
会得到类似__pyx_f_8your_file_neumaier_sum的修饰后函数名
3. 用objdump过滤该函数的汇编:
objdump -d your_file.o | sed -n '/__pyx_f_8your_file_neumaier_sum:/,/^$/p'
这个命令会只输出从目标函数开始到下一个空行的汇编代码,刚好覆盖整个函数。
方法2:单独提取函数编译生成汇编
- 生成Cython对应的C代码:
cython -3 your_file.pyx
- 打开生成的
your_file.c,找到__pyx_f_8your_file_neumaier_sum开头的完整函数,把它复制到临时文件temp_func.c,同时从原C文件顶部复制必要的头文件(比如#include "Python.h"、#include "numpy/arrayobject.h") - 编译临时文件生成汇编:
gcc -S -O2 temp_func.c -o temp_func.s
打开temp_func.s就是仅目标函数的汇编。
方法3:用gcc分段编译+objcopy提取
- 编译时让每个函数单独占一个段:
cython -3 your_file.pyx && gcc -c -fPIC -I/usr/include/python3.x -ffunction-sections your_file.c
- 提取目标函数的段到单独的目标文件:
objcopy --only-section=.text.__pyx_f_8your_file_neumaier_sum your_file.o neumaier_only.o
- 反汇编这个小文件:
objdump -d neumaier_only.o
输出的就是纯目标函数的汇编代码。
内容的提问来源于stack exchange,提问作者Simd
相关产品推荐
相关产品推荐

