我糊涂了.我在main函数中声明了一个变量,在另一个函数中声明了另一个变量.但是在gdb中,我发现程序main通过%esp寄存器访问函数中的变量,并通过寄存器访问另一个函数中的变量%ebp.不应该全部被%ebp功能访问?或者这是一个隐藏的规则,通过%esp注册访问main,我不知道?
/* source_file.c */
#include <stdio.h>
void localfunc(void)
{
int local_in_func;
local_in_func = 0x21;
printf("local_in_func = %d\n", local_in_func);
}
int main(int argc, char **argv)
{
int local_in_main;
local_in_main = 0x97;
printf("local_in_main = %d\n", local_in_main);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的反汇编代码如下:
(gdb) disassemble main
Dump of assembler code for function main:
0x08048407 <+0>: push %ebp
0x08048408 <+1>: mov %esp,%ebp
0x0804840a <+3>: and $0xfffffff0,%esp ; visit local_in_main by esp
0x0804840d …Run Code Online (Sandbox Code Playgroud) 我对 LEB128 或 Little Endian Base 128 格式感到困惑。在AOSP源码中Leb128.java,其read函数的返回类型无论是有符号还是无符号都是int。int我知道java中的大小是4个字节又名32bits。但 AOSP 中的最大长度LEB128是 5 个字节35 bits。那么其他的迷失在哪里呢3bits?
感谢您的回复。