如何提取python内置函数代码
据我所知,python内置函数是从C源代码编译而来,并内置到解释器中。有没有办法找出函数代码在反汇编程序中的位置 添加: 对于这样的函数,id()返回一个地址,不是吗?但当我在调试器中查看它时,它包含的内容与asm代码相去甚远 添加2:如何提取python内置函数代码,python,built-in,python-internals,Python,Built In,Python Internals,据我所知,python内置函数是从C源代码编译而来,并内置到解释器中。有没有办法找出函数代码在反汇编程序中的位置 添加: 对于这样的函数,id()返回一个地址,不是吗?但当我在调试器中查看它时,它包含的内容与asm代码相去甚远 添加2: 我没有源代码,因为解释器是定制的。所有的内置都是在\uuuuuuuuuuu内置的模块中定义的,由定义 要查找特定的内置函数,请查看和,然后grep Python源代码以获取附加函数的定义。\uuuuuuuuuuuuuuuu中的大多数函数都在同一个文件中定义 例如
我没有源代码,因为解释器是定制的。所有的内置都是在
\uuuuuuuuuuu内置的
模块中定义的,由定义
要查找特定的内置函数,请查看和,然后grep Python源代码以获取附加函数的定义。\uuuuuuuuuuuuuuuu
中的大多数函数都在同一个文件中定义
例如,在方法表中可以找到以下方法:
{“dir”,内置dir,METH\u VARARGS,dir\u doc},
并且定义了builtin\u dir
,委托给PyObject\u dir()
:
静态PyObject*
内置目录(PyObject*self,PyObject*args)
{
PyObject*arg=NULL;
if(!PyArg_解包元组(args,“dir”、0、1和arg))
返回NULL;
返回PyObject_Dir(arg);
}
通过Python源代码进行快速grep,我们可以看到,PyObject\u Dir()
是通过几个助手函数实现的:
/*dir()的实现——如果obj为NULL,则返回当前
(本地)范围。否则,执行对象的自省:返回
可从对象访问的属性名称(假定)的排序列表
*/
PyObject*
PyObject_Dir(PyObject*obj)
{
PyObject*结果;
if(obj==NULL)
/*没有目标——反思当地人*/
结果=_dir_locals();
其他的
/*对象——反思对象*/
结果=_dir_object(obj);
断言(结果==NULL | | PyList|u检查(结果));
if(结果!=NULL&&PyList_排序(结果)!=0){
/*对列表排序失败*/
Py_DECREF(结果);
结果=空;
}
返回结果;
}
所有内置项都在由定义的\uuuuuu内置\uuuuuuuu>模块中定义
要查找特定的内置函数,请查看和,然后grep Python源代码以获取附加函数的定义。\uuuuuuuuuuuuuuuu
中的大多数函数都在同一个文件中定义
例如,在方法表中可以找到以下方法:
{“dir”,内置dir,METH\u VARARGS,dir\u doc},
并且定义了builtin\u dir
,委托给PyObject\u dir()
:
静态PyObject*
内置目录(PyObject*self,PyObject*args)
{
PyObject*arg=NULL;
if(!PyArg_解包元组(args,“dir”、0、1和arg))
返回NULL;
返回PyObject_Dir(arg);
}
通过Python源代码进行快速grep,我们可以看到,PyObject\u Dir()
是通过几个助手函数实现的:
/*dir()的实现——如果obj为NULL,则返回当前
(本地)范围。否则,执行对象的自省:返回
可从对象访问的属性名称(假定)的排序列表
*/
PyObject*
PyObject_Dir(PyObject*obj)
{
PyObject*结果;
if(obj==NULL)
/*没有目标——反思当地人*/
结果=_dir_locals();
其他的
/*对象——反思对象*/
结果=_dir_object(obj);
断言(结果==NULL | | PyList|u检查(结果));
if(结果!=NULL&&PyList_排序(结果)!=0){
/*对列表排序失败*/
Py_DECREF(结果);
结果=空;
}
返回结果;
}