一、符号名与C语言变量的关系
局部变量放在栈里面,不会被其他地方引用,无需链接,故符号表里不存储局部变量;
全局变量或静态变量的变量名与符号表里的名字是一一对应的,所不同的是,符号表里记录的是变量地址,而不是变量;C语言里操作变量是直接使用变量,而不是使用地址(虽然实际上是操作变量所在地址的内容);
例如,
nRecv 0x2000004c Data 4 debug.o(.data)
这个符号,我们在c语言里操作是这样的nRecv=0,而不是*nRecv=0;
但是,在汇编里面操作的符号就是它后面的地址,给nRecv赋值,写法应该是:
IMPORT nRecv
LDR R0, =nRecv; move c variable(nRecv)'s address to R0
MOV R1, #0
STR R1, [R0]
所以,符号表里的符号后面的值=C语言里变量的地址;
当然,对于函数来说也是一样的:
__printf 0x080003cd Thumb Code 388 __printf_flags_ss_wp.o(.text)
strcpy 0x08000555 Thumb