NUL文字を含まない名前のアセンブラファイルにシンボルを定義したいと考えています。どのようにGNUアセンブラでそのようなシンボルを作成するのですか? NASMはどうですか? MASM?アセンブラで奇妙な名前のシンボルを作成するには?
編集:私はテストのために次のPythonスクリプトを使用しています(パイソンを3.5.1+が必要です):
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import tempfile
import os.path
import subprocess
import ctypes
def main(symbolname, quoter):
join = os.path.join
with tempfile.TemporaryDirectory() as d:
as_file_name = join(d, 'test.s')
with open(as_file_name, 'w') as file_object:
assembler = '''\
\t.globl "{0}"
"{0}":
\tmov $0x0, %rdi # exit status
\tmov $231, %rax # __NR_exit_group
\tsyscall
'''.format(quoter(symbolname))
file_object.write(assembler)
objectname, sharedlib = join(d, 'test.o'), join(d, 'test.so')
subprocess.check_call(['as', '-o', objectname, as_file_name])
subprocess.check_call(['ld', objectname, '-shared', '-o', sharedlib])
mydll = ctypes.pydll.LoadLibrary(sharedlib)
mydll[symbolname]
if __name__ == '__main__':
main('a', lambda x: x)
私は、私がmain
に渡されたアイデンティティ機能の代わりに置くことができるかを把握しようとしています.comm "my weirdsym .$ 12 foo^M bar" 2
(それは^ Mリテラルキャリッジリターンである、とobjdump -t
の出力は面白いに見える場所):コードは、私はガス中の私にとって'a'
マニュアルを読むのはいかがですか? [gas](https://sourceware.org/binutils/docs/as/Symbol-Intro.html)の場合は、次のようになります。_シンボル名は二重引用符で囲むこともできます。そのような場合、NUL文字以外の文字は許可されています。 "_ – Jester
@Jester残念ながら、私のテストではこれはうまくいかないと表示されています – Demi
とにかく「nasm」はまた、あなたのリンカがうまくいかないかもしれません.C++ネームのマングリングが存在する理由があります) – Jester