有时我发现llvm IR中的标签标识符以逗号';'
; <label> 6
开头,但是如我所知,逗号用于注释.那么llvm如何在评论中检索标签信息呢?我错过了什么吗?
遵循一个简单的测试.
C源文件:
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
if ( a > 3)
a *= 2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
http://llvm.org/demo/index.cgi生成的llvm IR代码(与clang -c -emit-llvm main.c相同)如下:
; ModuleID = '/tmp/webcompile/_13654_0.bc'
@.str = private unnamed_addr constant [3 x i8] c"%d\00", align 1
define i32 @main() nounwind uwtable {
%a = alloca i32, align 4
%1 = call i32 (i8*, ...)* @__isoc99_scanf(i8* getelementptr inbounds ([3 x i8]* @.str, i64 0, i64 0), i32* %a) …Run Code Online (Sandbox Code Playgroud) 简单的C文件:
#include <stdio.h>
int main(){
printf("Hello World");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译代码后,使用readelf -a a.out,精灵信息如下:

问题:
最近我试着自己在linux平台上编写一个简单的编译器.
当谈到编译器的后端时,我决定在不使用第三方库的情况下生成ELF格式的二进制文件,例如libelf.
相反,我想通过使用该write()函数并控制ELF文件的所有细节,尝试将机器代码直接写入与ELF ABI 相对应的文件中.
这种方法的优点是我可以控制编译器的所有内容.
但我犹豫了.考虑到ELF ABI的详细程度,这种方式是否可行?
我希望有任何建议和指向现有的可用资源.