小编Kik*_*api的帖子

Python 字节码和 .pyc 文件格式规范

我正在寻找 pyc 文件格式规范。我发现这个链接提供了没有操作码的字节码指令,但我需要更多详细的文件,其中包括.pyc. 谁能给我一个链接?

python bytecode pyc

5
推荐指数
2
解决办法
1万
查看次数

使用C api调用Ruby函数时出现分段错误

我正在尝试使用Ruby C API调用简单的ruby函数,当执行编译输出时我得到分段错误,我不确定是什么问题,我希望你能帮助我,谢谢.

C代码(./func.c)

#include <ruby.h>
int main(){
 VALUE obj;
 VALUE result;
 VALUE map;
 ruby_init();
 rb_require("./func.rb");
 obj=rb_str_new_cstr("");
 map = rb_hash_new();
 rb_hash_aset(map, rb_str_new2("key"),rb_str_new2("val"));

 result = rb_funcall(obj, rb_intern("func"), 1, map);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ruby代码(./func.rb)

def func(opts)
    puts opts['key']
end
Run Code Online (Sandbox Code Playgroud)

编译标志

gcc func.c -o func -I/home/wh/.rbenv/versions/2.1.6/include/ruby-2.1.0/x86_64-linux -I/home/wh/.rbenv/versions/2.1.6/include/ruby-2.1.0 -L/home/wh/.rbenv/versions/2.1.6/lib/ -lruby-static -lm -pthread -lcrypt -ldl -rdynamic
Run Code Online (Sandbox Code Playgroud)

运行./func时出现分段错误

<main>: [BUG] Segmentation fault at 0x00000000000018
ruby 2.1.6p336 (2015-04-13 revision 50298) [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0001 p:0000 s:0002 E:002468 TOP    [FINISH]


-- C level backtrace information …
Run Code Online (Sandbox Code Playgroud)

c ruby segmentation-fault

5
推荐指数
1
解决办法
362
查看次数

Java字节码lookupswitch和tableswitch总指令长度

使用给定的字节码,当遇到switch指令时,我想知道下一条指令的位置(不运行代码).为了做到这一点,我想我应该计算指令的总大小,包括跳转偏移或匹配偏移对.这可能吗?如果不是,怎么可能知道下一条指令在哪里?

此外,还有其他任何具有动态大小的字节码指令(它们的大小基于变量)吗?

tableswitch

tableswitch
<0-3 byte pad>
defaultbyte1
defaultbyte2
defaultbyte3
defaultbyte4
lowbyte1
lowbyte2
lowbyte3
lowbyte4
highbyte1
highbyte2
highbyte3
highbyte4
jump offsets...
Run Code Online (Sandbox Code Playgroud)

lookupswitch

lookupswitch
<0-3 byte pad>
defaultbyte1
defaultbyte2
defaultbyte3
defaultbyte4
npairs1
npairs2
npairs3
npairs4
match-offset pairs...
Run Code Online (Sandbox Code Playgroud)

java bytecode

3
推荐指数
1
解决办法
246
查看次数

调用python库函数的过程

我试图了解调用python函数的过程,我创建.pyc了调用的简单文件os.listdir('.'),我看到oslistdir保存在co_names表中,执行CALL_FUNCTION字节码指令时,如何os识别库?是根据它的名字使用co_names表吗?python 是否开始搜索名为 的模块os.pyc?如果是这样,python 如何知道.pyc模块中调用的函数的字节码的偏移量在哪里?

谢谢。

dis 模块字节码片段

  5          28 LOAD_NAME                0 (os)
             31 LOAD_ATTR                2 (listdir)
             34 LOAD_CONST               3 ('.')
             37 CALL_FUNCTION            1
Run Code Online (Sandbox Code Playgroud)

python bytecode

3
推荐指数
1
解决办法
162
查看次数

标签 统计

bytecode ×3

python ×2

c ×1

java ×1

pyc ×1

ruby ×1

segmentation-fault ×1