字节码与二进制格式(ELF/WASM/class)

共 55 题
#

1. WebAssembly 字节码(.wasm)的 MVP 指令集包含 br/if/memory/call 等哪些指令?

A WASM 无控制流指令
B WASM 指令无类型检查
C WASM 指令集含结构化控制流(br/if)与类型化内存访问(load/store) ✓ 正确答案
D WASM 内存访问无验证
#

2. WASI Preview2 由 WASI 0.2(HTTP、Sockets、Storage、Filesystem、IO、Clocks、Random)的工程价值?

A WASI 无法访问宿主能力
B WASI 与运行时无关
C WASI Preview2 提供标准化系统接口,保证跨运行时可移植 ✓ 正确答案
D WASI 只支持浏览器
#

3. ART .dex(Dalvik Executable)在 Android 5+ 的 dexopt / dex2oat AOT 编译的工程价值?

A dex2oat 增加运行时开销
B ART 只解释不编译
C dex2oat 在安装时把 dex AOT 编译为本地代码,提升启动性能 ✓ 正确答案
D AOT 编译不经过 dex
#

4. Elf64_auxv 在程序加载器向程序传递 auxiliary vector 的工程价值?

A auxv 需系统调用获取
B auxv 由加载器经栈传给程序,提供页面大小、VDSO 地址等启动信息 ✓ 正确答案
C auxv 只含函数名
D auxv 与启动无关
#

5. trace_pipe 通过 splice / read 的工程应用?

A trace_pipe 只能一次性读取
B trace_pipe 支持流式读取,可经 splice 零拷贝消费追踪数据 ✓ 正确答案
C trace_pipe 不支持 splice
D trace_pipe 与 ftrace 无关
#

6. Go binary 的 ELF section(.gosymtab、.gopclntab、.text 与 .data/.bss)的工程价值?

A .gosymtab 存机器码
B .gopclntab 存储 PC 到行号映射,支撑 Go 回溯与采样 ✓ 正确答案
C .gopclntab 与运行时无关
D Go 无调试符号
#

7. Full RELRO(-z relro -z now)在 GOT 内存只读防止 GOT overwrite 攻击?

A GOT 在 Full RELRO 下可写
B Full RELRO 保持 lazy binding
C Full RELRO 用 -z now 立即绑定并置 GOT 只读,防止 GOT overwrite ✓ 正确答案
D RELRO 与 GOT 无关
#

8. PE / COFF 延迟绑定通过 Delay Import Descriptor(DIDT)的工程价值?

A DIDT 增加启动开销
B DIDT 在启动时加载全部 DLL
C DIDT 与延迟绑定无关
D DIDT 实现延迟导入,首次调用才加载 DLL,加快启动 ✓ 正确答案
#

9. Mach-O Universal / Fat binary 多架构(x86_64 + arm64)的工程价值?

A Fat binary 单文件封装多架构,加载时按架构选择,简化分发 ✓ 正确答案
B Fat binary 只能支持单架构
C Fat binary 增加分发复杂度
D Fat binary 与架构无关
#

10. ELF symbol 类型(FUNC、OBJECT、NOTYPE、FILE 等)的工程价值?

A FUNC 表示函数、OBJECT 表示数据对象、FILE 表示源文件符号 ✓ 正确答案
B FUNC 表示数据对象
C OBJECT 表示函数
D FILE 表示函数符号
#

11. 符号版本化(symbol versioning,.gnu.version)如何支撑同一库的多版本 ABI 共存?

A 符号版本化只支持单版本
B .gnu.version 让符号关联版本,支持同一库多版本 ABI 共存 ✓ 正确答案
C .gnu.version 与 ABI 无关
D 符号版本化破坏兼容
#

12. WASM 验证器(verifier)相对 JVM 的边界检查?

A WASM 验证器静态检查类型与内存访问,JVM verifier 也需运行时边界检查 ✓ 正确答案
B WASM 不做验证
C JVM 无需验证
D 两者验证方式完全相同
#

13. PE / COFF 在 Windows PE 加载器(ntdll!LdrLoadDll)的延迟绑定?

A LdrLoadDll 与加载无关
B Windows 启动时加载全部 DLL
C Windows 加载器经 ntdll!_LdrLoadDll 加载 DLL,延迟绑定在首次调用时加载 ✓ 正确答案
D Windows 无延迟绑定
#

14. RELRO(Partial/Full)如何保护 GOT 免受覆写攻击,与 BIND_NOW 的关系是什么?

A RELRO 与 GOT 无关
B Partial RELRO 使整个 GOT 只读
C BIND_NOW 保持 lazy binding
D Full RELRO 依赖 BIND_NOW 使 GOT 全部只读,防止覆写 ✓ 正确答案
#

15. WASM Component Model(wasmtime、wasmCloud)的 WIT(WebAssembly Interface Types)的工程价值?

A WIT 与跨语言无关
B WIT 定义组件接口,支持跨语言组件互操作与组合 ✓ 正确答案
C WIT 无法定义类型
D WIT 只用于单语言
#

16. WASM SIMD(WASM SIMD 128-bit)与 Threads、Reference Types 的扩展?

A Reference Types 与引用无关
B SIMD 只用于标量
C Threads 不支持共享内存
D WASM SIMD 提供向量计算,Threads 引入共享内存与原子操作 ✓ 正确答案
#

17. WASM GC(WASM GC proposal)相对手动分配的工程价值?

A WASM GC 强制手动分配
B WASM GC 提供自动垃圾回收,减少手动内存管理负担 ✓ 正确答案
C WASM GC 与对象无关
D WASM GC 不支持复杂类型
#

18. .class 的 attributes(Code、ConstantValue、LineNumberTable、LocalVariableTable)的工程价值?

A Code 存局部变量名
B Code 存字节码,LineNumberTable 映射源码行号,支撑执行与调试 ✓ 正确答案
C LineNumberTable 存字节码
D ConstantValue 存方法字节码
#

19. .class 的 major.minor version(55/61/65 对应 Java 11/17/21)的工程价值?

A 所有 JVM 接受所有 class 版本
B class 版本与 Java 无关
C class major 版本标识对应 Java 版本,JVM 据此判断兼容性 ✓ 正确答案
D major 版本只影响性能
#

20. JVM TI 在 JDWP(Java Debug Wire Protocol)debugger 的工程应用?

A JVM TI 是调试协议
B JDWP 提供断点能力
C JVM TI 提供断点与事件能力,JDWP 传输调试命令,实现远程调试 ✓ 正确答案
D 调试与 JVM TI 无关
#

21. D8 dexer 与 R8 optimizer(tree shaking)的工程价值?

A D8 转换 dex,R8 做 tree shaking 删除未用代码,减小体积 ✓ 正确答案
B D8 做 tree shaking
C R8 只转换格式
D D8/R8 与优化无关
#

22. ART 的 JIT compiler(mterp)vs AOT 在安装包的工程边界?

A AOT 提升运行性能但增大安装体积,JIT 按需编译减少安装开销 ✓ 正确答案
B AOT 减小安装体积
C JIT 在安装时预编译
D ART 只解释不编译
#

23. Go 1.17+ register-based ABI 在 stack frame 的工程边界?

A register ABI 不改变栈帧
B Go 仍全栈传参
C Go register ABI 用寄存器传参减少栈帧操作,但保留参数溢出空间 ✓ 正确答案
D Go ABI 对外可变
#

24. Rust 通过 LLVM-CFI 与 KASAN / shadow call stack 的工程价值?

A shadow call stack 检测内存
B CFI 检测内存越界
C KASAN 校验控制流
D LLVM-CFI 校验控制流、KASAN 检测内存越界、shadow call stack 保护返回地址 ✓ 正确答案
#

25. Mach-O 的 LC_MAIN 入口命令如何指定程序入口(entryoff 与 stacksize),相比 LC_UNIXTHREAD 有何演进?

A LC_MAIN 与入口无关
B LC_MAIN 保存寄存器上下文
C LC_UNIXTHREAD 用 entryoff
D LC_MAIN 用 entryoff 与 stacksize 声明入口与栈,比 LC_UNIXTHREAD 更简洁 ✓ 正确答案
#

26. .interp 在 rustc -C link-self-contained=no 的默认行为?

A self-contained=no 会静态链接所有
B -C link-self-contained=no 让二进制依赖系统动态链接器,用 .interp 指定路径 ✓ 正确答案
C .interp 与链接器无关
D 该选项不影响 .interp
#

27. ELF 重定位项 R_X86_64_64、R_X86_64_PC32、R_X86_64_GLOB_DAT、R_X86_64_JUMP_SLOT 的含义与触发时机分别是什么?

A R_X86_64_64 是 PC 相对
B R_X86_64_GLOB_DAT 设 GOT 表项为符号地址,JUMP_SLOT 处理函数跳转槽 ✓ 正确答案
C R_X86_64_PC32 是绝对地址
D JUMP_SLOT 处理数据
#

28. 静态链接与动态链接在体积、启动时间与 ABI 兼容性上的取舍如何影响发布策略?

A 动态链接无 ABI 问题
B 静态链接体积最小
C 静态链接规避 ABI 兼容问题但体积大,动态链接体积小但依赖运行时兼容 ✓ 正确答案
D 静态链接启动最慢
#

29. buffer ring 在减少用户态/内核态 buffer 拷贝的工程边界?

A buffer ring 无需管理缓冲
B buffer ring 无任何限制
C buffer ring 只增加拷贝
D buffer ring 减少拷贝,但需预先注册缓冲并管理生命周期 ✓ 正确答案
#

30. 为何同一份可观测性需求有时选 kprobe 有时选 tracepoint,稳定性与内核版本兼容性如何权衡?

A 有 tracepoint 时优先选以保稳定,需追踪内部函数时用 kprobe 求灵活 ✓ 正确答案
B kprobe 比 tracepoint 稳定
C tracepoint 跨版本易变
D 两者无差异
#

31. ring buffer 在 latency-critical tracepoint 的丢失边界?

A 延迟场景不会丢失
B ring buffer 永不丢失
C 丢失与容量无关
D ring buffer 容量有限,事件爆发超过消费速率时可能丢失 ✓ 正确答案
#

32. Rust nightly 的 -Z sanitize=cfi 与 cargo-cfi 的工程应用?

A CFI 无运行时开销
B CFI 检测内存越界
C cargo-cfi 与 CFI 无关
D -Z sanitize=cfi 在间接调用处插入 CFI 校验,防控制流劫持 ✓ 正确答案
#

33. plt-bench 在 perf_event_open 与 lazy binding count 的工程价值?

A plt-bench 与 PLT 无关
B plt-bench 经 perf_event 统计 lazy binding 开销,评估 PLT 性能 ✓ 正确答案
C plt-bench 无法统计绑定次数
D plt-bench 只测内存
#

34. .interp 段如何指定动态链接器路径,为什么 x86-64 上常见 /lib64/ld-linux-x86-64.so.2,路径选择与多发行版兼容性有何关系?

A .interp 与兼容性无关
B .interp 保存程序入口
C 解释器路径通用
D .interp 保存动态链接器路径,硬编码路径影响跨发行版兼容 ✓ 正确答案
#

35. WASI Preview2 component model 集成 wit-bindgen 在 Rust、C、Go 的工程价值?

A wit-bindgen 与接口无关
B wit-bindgen 只支持单语言
C wit-bindgen 按 WIT 生成多语言绑定,支持跨语言组件互操作 ✓ 正确答案
D wit-bindgen 无法生成绑定
#

36. WASI Preview2 在 wasmtime、wasmer、wasmCloud 的工程应用?

A WASI 无法服务端运行
B WASI 只支持浏览器
C wasmCloud 与 WASI 无关
D wasmtime/wasmCloud 等基于 WASI 让 WASM 组件跨运行时部署 ✓ 正确答案
#

37. Java .class 常量池、access flags、this/super class、interfaces 在 javap 的工程价值?

A 常量池存常量引用,access flags 记访问修饰符,javap 据此解析类 ✓ 正确答案
B 常量池存字节码
C access flags 存方法体
D interfaces 指定父类
#

38. .class 的 methods_count、fields_count 在 instrumentation 工具的工程价值?

A instrumentation 不需遍历方法
B 计数字段与解析无关
C methods_count/fields_count 让工具定位方法表与字段表,支撑字节码改写 ✓ 正确答案
D 计数字段存字节码
#

39. JVM TI 允许 native agent 拦截 method entry / exception / monitor 的工程价值?

A JVM TI 需修改字节码
B JVM TI 无法拦截异常
C JVM TI 可拦截 method entry/exception/monitor 事件,支撑观测与治理 ✓ 正确答案
D JVM TI 只能观测内存
#

40. JVM TI 在 JDK 9+ JVMTI ThreadLocalStorage 替代旧 JNI env 的工程价值?

A JDK 9+ 无 TLS 接口
B ThreadLocalStorage 依赖 JNI env
C JDK 9+ JVMTI ThreadLocalStorage 规范管理线程独立数据,替代旧 JNI env 方式 ✓ 正确答案
D ThreadLocalStorage 与线程无关
#

41. .dex 的 string_ids、type_ids、proto_ids、field_ids、method_ids 的数据结构的工程价值?

A string_ids 存方法
B dex 内联所有引用
C dex 用 string/type/field/method 等 ID 表组织引用,紧凑高效 ✓ 正确答案
D method_ids 存字符串
#

42. Linux core dump 的 PT_NOTE 段保存 register 与 memory 的工程语义?

A PT_NOTE 与调试无关
B PT_NOTE 只存代码
C PT_NOTE 段保存寄存器与进程信息,调试器据此重建崩溃现场 ✓ 正确答案
D PT_NOTE 存内存映射
#

43. core_pattern 在 /proc/sys/kernel/core_pattern 管道化 gdb server / systemd-coredump 的工程价值?

A core_pattern 管道化把 core 交给 systemd-coredump 等自动收集存储 ✓ 正确答案
B core_pattern 只能写文件
C systemd-coredump 与 core 无关
D 管道化无法处理 core
#

44. coredump 中的 NT_PRSTATUS、NT_FPREGSET 等 note 类型分别保存什么寄存器状态,gdb 如何据此重建调用现场?

A gdb 无法使用 note
B NT_PRSTATUS 存浮点寄存器
C NT_FPREGSET 存通用寄存器
D NT_PRSTATUS 存通用寄存器、NT_FPREGSET 存浮点寄存器,gdb 据此重建现场 ✓ 正确答案
#

45. coredump 文件的 mmap memory vs 实存 memory 的工程取舍?

A mmap 文件区总是转储
B 实存转储体积大但还原完整,mmap 文件区可不转储以减小体积 ✓ 正确答案
C 实存转储体积最小
D coredump 无体积取舍
#

46. systemd-coredump 对 core 文件的压缩、保留策略与 journalctl 检索如何配置,磁盘占用如何控制?

A systemd-coredump 不控制磁盘
B systemd-coredump 无法压缩
C core 无法检索
D systemd-coredump 配置压缩与保留策略,core 摘要可经 journalctl 检索 ✓ 正确答案
#

47. vmlinux BTF 在 kernel 5.x 的官方发布?

A vmlinux BTF 与 eBPF 无关
B 内核 5.x 官方嵌入 vmlinux BTF,支撑 CO-RE 跨内核可移植 ✓ 正确答案
C 内核不含 BTF
D vmlinux BTF 只服务调试
#

48. Mach-O 的 LC_LOAD_DYLIB 与 LC_REEXPORT_DYLIB 在 dyld 解析的工程价值?

A LC_LOAD_DYLIB 声明依赖库,LC_REEXPORT_DYLIB 再导出符号简化 API 面 ✓ 正确答案
B LC_LOAD_DYLIB 再导出符号
C LC_REEXPORT_DYLIB 声明依赖
D 两者与 dyld 无关
#

49. .symtab vs .dynsym 在 stripped 与 not-stripped 的工程差异?

A strip 移除 .symtab 影响调试,但 .dynsym 保留保证运行 ✓ 正确答案
B strip 移除 .dynsym
C .symtab 运行必需
D strip 后无法运行
#

50. .gnu.hash 在 GNU hash table 相对 sysv hash(.hash)的 O(N) lookup vs O(1) lookup 的工程价值?

A .gnu.hash 最坏 O(N)
B .gnu.hash 与 .hash 查找相同
C .gnu.hash 用更优哈希接近 O(1) 查找,加速符号解析 ✓ 正确答案
D .gnu.hash 拖慢链接
#

51. .gnu.hash 的 Bloom filter 加速 dynamic linker 解析的工程价值?

A .gnu.hash 的 Bloom filter 快速排除不可能符号,加速解析 ✓ 正确答案
B Bloom filter 减慢解析
C Bloom filter 与查找无关
D .gnu.hash 无 Bloom filter
#

52. .interp 段保存 dynamic linker path(/lib64/ld-linux-x86-64.so.2)的工程价值?

A .interp 保存程序入口
B .interp 保存动态链接器路径,内核据此加载解释器 ✓ 正确答案
C .interp 与动态链接无关
D .interp 存符号表
#

53. .fini_array 段在 atexit / destructor 的工程调用顺序?

A .fini_array 与析构无关
B .fini_array 在启动时执行
C .fini_array 存退出时执行的函数指针,在进程退出时逆序调用 ✓ 正确答案
D .fini_array 存构造函数
#

54. .init_array 与 .preinit_array 在 dlopen 之前的执行顺序?

A .init_array 先于 preinit
B .preinit_array 在 dlopen 之前执行,先于 .init_array ✓ 正确答案
C preinit 在 dlopen 之后
D 两者顺序无关
#

55. .rela.dyn 与 .rela.plt 两类重定位节分别在何时被处理?

A .rela.plt 启动时总是处理
B .rela.dyn 配合 lazy binding
C .rela.dyn 启动时处理数据重定位,.rela.plt 配合 lazy binding 按需处理 ✓ 正确答案
D 两者处理时机相同