package symbfile

Mouse Melon logoGet desktop application:
View/edit binary Protocol Buffers messages

symbfile.proto:52

Header message. Currently empty.

(message has no fields)

message LineTable

symbfile.proto:165

Columnar array mapping range offsets to line numbers. The line table only contains information for ranges that aren't covered by other inline functions.

Used in: RangeV1

enum MessageType

symbfile.proto:55

Defines the type of a message.

message RangeV1

symbfile.proto:118

Symbol information for a range of instructions. The ranges essentially represent a flattened interval tree of inline functions. Consider the following source file `main.c`: ```text 01 ┃ #include <stdio.h> 02 ┃ #include <stdlib.h> 03 ┃ #include <string.h> 04 ┃ 05 ┃ int main() { 06 ┃ char* s = strdup("Hello, world!"); 07 ┃ puts(s); 08 ┃ free(s); 09 ┃ return 0; 10 ┃ } ``` Imagine the compiler optimized the binary as follows, inlining the `strdup`, `puts` and `free` functions into `main` and then additionally inlining `malloc` and `strcpy` into the `strdup` inline instance (thus transitively also into `main`). ```text Depth 2 ┃ [ malloc ][ strcpy ] 1 ┃ [ strdup ] [ puts ] [ free ] 0 ┃ [ main ] ━━╋━━━━━━━━━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━┷━━━━━ ELF VA 0x000 0x100 0x200 ``` The corresponding `Range` records would look like this (arbitrary order): ```text ┃ elf VA ┃ length ┃ func ┃ file ┃ call line ┃ depth ┃ ┣━━━━━━━━╋━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━╋━━━━━━━┫ ┃ 0x0000 ┃ 0x0210 ┃ main ┃ /home/bob/main.c ┃ 0 ┃ 0 ┃ ┃ 0x000A ┃ 0x0100 ┃ strdup ┃ /lib/glibc/sdup.c ┃ 6 ┃ 1 ┃ ┃ 0x0010 ┃ 0x0081 ┃ malloc ┃ /lib/glibc/mm.c ┃ 1234 ┃ 2 ┃ ┃ 0x0010 ┃ 0x0073 ┃ strcpy ┃ /lib/glibc/scpy.c ┃ 1240 ┃ 2 ┃ ┃ 0x0110 ┃ 0x0084 ┃ puts ┃ /lib/glibc/io.c ┃ 7 ┃ 1 ┃ ┃ 0x017C ┃ 0x006A ┃ free ┃ /lib/glibc/io.c ┃ 8 ┃ 1 ┃ ```

message ReturnPadV1

symbfile.proto:210

Information about an instruction that can serve as the next instruction after a call instruction. These are instructions that can show up as non-leaf frames in stack traces, which is why we special-case them. This message stores the whole inline function stack for the given address in a columnar fashion. The records are ordered by their depth in the inline stack in ascending order (top-level function is first).

message StringTableV1

symbfile.proto:245

Replace the string lookup table in the reader.