先解释下程序调用so库的情况下函数基本的运行过程,在编译的时候,函数调用外部so库的某方法,他会先在PLT(Produce Linke Table,过程链接表)中插入一个记录,用于代理这个函数的调用,运行的时候,这个代理会去GOT(Global offset Table)中找这个函数的地址,找不到会创建一条记录,但是这个记录里没有这个函数的地址,然后他会去问PLT,PLT会通过PLT[0],找到GOT[2],然后通过ld.linux.so 程序在内存中找到这个函数的地址,然后给GOT赋值。
先解释下程序调用so库的情况下函数基本的运行过程,在编译的时候,函数调用外部so库的某方法,他会先在PLT(Produce Linke Table,过程链接表)中插入一个记录,用于代理这个函数的调用,运行的时候,这个代理会去GOT(Global offset Table)中找这个函数的地址,找不到会创建一条记录,但是这个记录里没有这个函数的地址,然后他会去问PLT,PLT会通过PLT[0],找到GOT[2],然后通过ld.linux.so 程序在内存中找到这个函数的地址,然后给GOT赋值。
发表回复