news 2026/4/23 14:40:02

JVM中对于源码中符号的管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JVM中对于源码中符号的管理

JVM中对于源码中符号的管理

1 符号的用途

首先,我们要确定什么是符号?

以最简单的C语言为例说明

#include <stdio.h> int main(){ int i = 10; printf("%d",i); return 0; }

上述代码中所有的变量名和函数名是符号(Symbol),如main,i其他的如int,return等都不为符号,他们为C语言本身的关键字。

符号的作用是当两个目标文件在做链接时可以准确地找到目标。比如,在目标文件A中定义了函数foo,目标文件B引用目标文件A中的函数foo时必须保证唯一且准确地找到该函数。此时,每个函数或变量都必须有自己独特的名字才不至于被混淆。(来自《程序员的自我修养》P81)

2 静态语言的符号

静态语言编译器gcc将上述代码编译后,其符号会被放入目标文件(.o)的符号表中。以上述代码为例

由于目标文件(.o)是二进制文件,可以使用nm工具查看

其中,T表示全局符号,U表示Undefine,即未定义,需要外部链接使用才可以。i不放入符号表是因为编译器根据源码逻辑直接将其优化,将100作为参数赋予printf函数。

使用下面的命令可以查看其表头的信息

readelf -S main.o There are 14 section headers, starting at offset 0x268: [Nr] Name Type Address Offset Size EntSize Flags Link Info Align [11] .symtab SYMTAB 0000000000000000 00000100 0000000000000090 0000000000000018 12 4 8 [12] .strtab STRTAB 0000000000000000 00000190 0000000000000014 0000000000000000 0 0 1

可以看到符号表的信息

起始地址大小
距离文件头0x100字节处0x90字节

下面是使用visual studio code查看相关的二进制内容

在该表中如何定位我们用nm命令找出的mainprintf呢?

由于符号表的数据结构如下

typedef struct { Elf64_Word st_name; /* 符号名在字符串表中的偏移量 */ unsigned char st_info; /* 类型和绑定信息 */ unsigned char st_other; /* 可见性 */ Elf64_Half st_shndx; /* 所属节索引 */ Elf64_Addr st_value; /* 符号值/地址 */ Elf64_Xword st_size; /* 符号大小 8字节*/ } Elf64_Sym;


可知一个Elf64_Sym项目长度为24个字节,那么上述0x90个字节长度的符号表应该保存6个符号项。我们可以用下面的命令来分析二进制目标文件看看是不是6个项目

jx@jx-virtual-machine:~/src/c$ readelf -s main.o Symbol table'.symtab'contains6entries: Num: Value Size Type Bind Vis Ndx Name0: 00000000000000000NOTYPE LOCAL DEFAULT UND1: 00000000000000000FILE LOCAL DEFAULT ABS main.c2: 00000000000000000SECTION LOCAL DEFAULT1.text3: 00000000000000000SECTION LOCAL DEFAULT5.rodata4: 000000000000000051FUNC
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:11:06

基于 YOLOv5n 的课堂手机检测系统:让“低头族”无处遁形

在课堂上&#xff0c;老师最头疼的场景之一&#xff0c;莫过于学生“低头玩手机”。人工巡视不仅效率低&#xff0c;而且难以兼顾全班&#xff0c;更无法形成可量化的管理依据。随着计算机视觉技术的成熟&#xff0c;能否让系统“自动看懂课堂”&#xff0c;成为智慧教学中的一…

作者头像 李华
网站建设 2026/4/20 16:52:17

基于MATLAB的HSV颜色特征杂草图像识别系统设计与实现

摘要&#xff1a;随着农业信息化和智能化的发展&#xff0c;农田杂草的快速、准确识别对提高作物产量和实现精准农业具有重要意义。针对传统人工识别效率低、主观性强的问题&#xff0c;本文设计并实现了一种基于 MATLAB 的 HSV 颜色特征杂草图像识别系统。作者&#xff1a;Bob…

作者头像 李华
网站建设 2026/4/16 11:15:49

2025自考必备10个降AI率工具

2025自考必备10个降AI率工具 AI降重工具&#xff1a;自考论文的得力助手 随着人工智能技术的快速发展&#xff0c;越来越多的学生在撰写论文时开始依赖AI工具。然而&#xff0c;AI生成的内容往往存在较高的AIGC率&#xff0c;容易被查重系统识别为非原创内容&#xff0c;影响论…

作者头像 李华
网站建设 2026/4/20 19:49:00

2025最新!10个AI论文平台测评:继续教育写论文不再难

2025最新&#xff01;10个AI论文平台测评&#xff1a;继续教育写论文不再难 2025年AI论文平台测评&#xff1a;助力继续教育高效写作 在当前学术环境日益复杂、科研任务不断加重的背景下&#xff0c;继续教育群体在撰写论文时面临诸多挑战。从选题构思到文献检索&#xff0c;从…

作者头像 李华
网站建设 2026/4/23 13:00:02

Exchange 2007 GUID 参照:属性与对象标识汇总

Qwen3Guard-Gen-8B 与 Exchange 2007 GUID 参照&#xff1a;从安全治理到系统底层的贯通 在企业 IT 架构演进的长河中&#xff0c;有些技术看似已步入“遗产”行列&#xff0c;比如 Exchange Server 2007&#xff1b;而另一些则代表了前沿方向&#xff0c;例如基于大模型的内容…

作者头像 李华
网站建设 2026/4/23 13:00:42

StepFun团队打造32B参数深度研究智能体

这项由StepFun公司Agent团队在2024年12月完成的研究&#xff0c;发表在arXiv平台上&#xff0c;论文编号为arXiv:2512.20491v1。对于关注人工智能发展的读者&#xff0c;可以通过这个编号查询到完整的技术论文。当你需要深入研究某个复杂话题时&#xff0c;比如了解某个行业的发…

作者头像 李华