linux – 如何使Unix二进制自包含?
发布时间:2020-12-13 19:43:28 所属栏目:Linux 来源:网络整理
导读:我有一个没有源代码的 Linux二进制文件,它可以在一台机器上工作,我想制作一个独立的软件包,运行在同一架构的不同机器上.什么是实现这一目标的方法? 在我的情况下,这两台机器具有相同的架构,相同的Ubuntu内核,但目标机没有make,并且/ lib和/ usr下的文件版本
我有一个没有源代码的
Linux二进制文件,它可以在一台机器上工作,我想制作一个独立的软件包,运行在同一架构的不同机器上.什么是实现这一目标的方法?
在我的情况下,这两台机器具有相同的架构,相同的Ubuntu内核,但目标机没有make,并且/ lib和/ usr下的文件版本不正确 一个想法是使用chroot并重新创建二进制文件使用的文件系统的一个子集,可能使用strace来确定它需要什么.有没有这样做的工具? 对于后代,这里是如何确定进程打开的文件 #!/usr/bin/python # source of trace_fileopen.py # Runs command and prints all files that have been successfully opened with mode O_RDONLY # example: trace_fileopen.py ls -l import re,sys,subprocess,os if __name__=='__main__': strace_fn = '/tmp/strace.out' strace_re = re.compile(r'([^(]+?)((.*))s*=s*(S+?)s+(.*)$') cmd = sys.argv[1] nowhere = open('/dev/null','w')# p = subprocess.Popen(['strace','-o',strace_fn]+sys.argv[1:],stdout=nowhere,stderr=nowhere) sts = os.waitpid(p.pid,0)[1] output = [] for line in open(strace_fn): # ignore lines like --- SIGCHLD (Child exited) @ 0 (0) --- if not strace_re.match(line): continue (function,args,returnval,msg) = strace_re.findall(line)[0] if function=='open' and returnval!='-1': (fname,mode)=args.split(',',1) if mode.strip()=='O_RDONLY': if fname.startswith('"') and fname.endswith('"') and len(fname)>=2: fname = fname[1:-1] output.append(fname) prev_line = "" for line in sorted(output): if line==prev_line: continue print line prev_line = line 更新 解决方法
有一个
CDE的软件设计完成你想要的.这是一个谷歌技术的谈话
http://www.youtube.com/watch?v=6XdwHo1BWwY (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读