如果需要在程序启动时运行一段代码(在Linux上),如何正确使用可执行文件(ELF32-i386)的.init_section?我有以下代码(GNU汇编程序),它具有ctor初始化函数,并且该函数的地址放在.init_array部分:
.intel_syntax noprefix
.data
s1: .asciz "Init code\n"
s2: .asciz "Main code\n"
.global _start
.global ctor
.text
ctor:
mov eax, 4 # sys_write()
mov ebx, 1 # stdout
mov ecx, offset s1
mov edx, 10
int 0x80
ret
.section .init_array
.long ctor
.text
_start:
mov eax, 4
mov ebx, 1
mov ecx, offset s2
mov edx, 10
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
此代码汇编为:
as -o init.o init.asm
ld -o init init.o
运行生成的可执行文件时,仅打印“主代码”字符串.如何正确使用.init_array部分?
EDIT1:我想使用.init_array,因为有多个源文件都有自己的初始化代码.可以在启动时“手动”调用所有这些代码,并在每次将源文件添加到项目或从项目