【问题标题】:How to make GNU assembler and linker output resulting code to stdout, not to file?如何使 GNU 汇编器和链接器将结果代码输出到标准输出,而不是文件?
【发布时间】:2014-09-24 16:42:37
【问题描述】:

所以我可以制作 python 脚本,它将汇编代码传递给“as”标准输入,并通过“ld”标准输出获取生成的二进制文件。

更新:

我已经尝试过'-o /dev/stdout',但这不起作用:

as -o /dev/stdout test.s test.s:汇编器消息: test.s:致命错误:无法写入 /dev/stdout:非法搜索 test.s:致命错误:无法关闭 /dev/stdout:非法搜索

更新二:

你为什么要做这样的事情?

想要为 gsasl 创建 python 绑定。动态生成机器代码以将其用作以某种方式调用 python 可调用对象的回调(对于 gsasl_callback_set)。使用标准输出而不是临时文件以获得更高的安全性和性能。只是我的疯狂想法之一.. 因为使用 SWIG 进行回调并不那么容易.. 目前正在尝试与 Vala 和 Gir 一起玩,也许这会是更通用的方式.. 我不想使用是有原因的赛通。

【问题讨论】:

  • 只需使用-o /dev/stdout,它应该可以工作。你必须让as对其他事情保持沉默。你的意思并不完全清楚。 as 可以被多次调用来创建一个对象。然后它们都链接在一起。也许你可以使用as -o /dev/stdout | objcopy -i /dev/stdin
  • 你不能。他们需要随机访问他们的输出文件。现在,你为什么要做这样的事情?

标签: ld gnu-assembler


【解决方案1】:

这两个工具的输出无法重定向。这样做的骇人听闻的方法是编写一个以 ld 开头的启动器,并在完成后将 -o 选项指向的已生成文件的内容读取到标准输出(或其他方式)中。


关于更新 II 中的问题

要在脚本语言中处理回调,有 libffi,Cython 和许多其他语言的含义已经使用它来与 C/C++ 代码回调交互。

这里主要介绍 C/C++ 目标回调中所谓的“用户数据”参数,因此其他语言(在本例中为 Python)的对象(可能是函数或方法)指针或描述符可以与回调一起传递以保留上下文。 Gsasl 的回调机制没有这样的“用户数据”参数,并且无法与某些类实例进行良好的绑定,因此跟踪回调上下文将需要在 python 中创建和使用全局变量,因此最好找到一些纯 python 实现,而不是使用全局变量或单例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    相关资源
    最近更新 更多