6 comments

  • vlovich123 10 hours ago
    How does this compare with gimli-rs? Last I checked it was the absolute leader in performance.

    https://github.com/gimli-rs/gimli

    • lambda_foo 8 hours ago
      Author here, a bit cringe to see your WIP project posted here.

      My motivation for writing this from scratch is to simultaneously understand DWARF 5 in all its gory details, develop tooling to support my work on the OCaml compiler, and to build a source debugger in OCaml. The performance or lack of isn't a focus right now, I'm sure it doesn't compare to gimli-rs for performance but it does fully support DWARF 5 which gimli-rs doesn't (missing debug_info section support https://github.com/gimli-rs/gimli/pull/807).

      Currently I'm working on the read support, and various bits of tooling around understanding Call Frame Information and simulating the DWARF expression evaluation. I'm unhappy with the tooling GDB/LLDB provide for displaying and debugging this information, I've personally spent far too much time staring at CFI expressions and walking memory looking for where it goes wrong. In the OCaml compiler we have few people that understand or work on this area.

      • erichdongubler 7 hours ago
        > Author here, a bit cringe to see your WIP project posted here.

        I'm confused; are you referring to GP's link to `gimli`, or your own repo in the OP?

  • woodruffw 7 hours ago
    DWARF is such a neat little format. I have a soft spot for the "line program" table, which is a little state machine that allows DWARF to efficiently encode a line/column correspondence for virtual addresses.
  • WalterBright 52 minutes ago
    Best of luck to you! I spent many hours trying to understand and generate proper Dwarf tables.
  • iou 11 hours ago
    I sure hope there’s an anti-debug framework called Durin’s Bane?
    • shawn_w 6 hours ago
      Bad idea to delve too deep into the binary.
      • elteto 1 hour ago
        "The dwarves debugged too greedily and too deep. You know what they awoke in the darkness of GDB-dum... stack corruption and flame.“
    • ModernMech 8 hours ago
      I hope if you use it in late Ocotober when the moon is out, it opens the CD tray... for those who still have one.
  • zidel 8 hours ago
    One interesting thing about the dwarf format is that it is executable and Turing complete, running small programs on a virtual machine to figure out file names, line numbers and exception handling.
    • lambda_foo 8 hours ago
      It's really fascinating the different little evaluators that exist in DWARF. I started writing one for the DWARF expression format (https://github.com/tmcgilchrist/durin/pull/7) that I'm integrating with a debugger and free-monad/effect handler style code to lookup the missing data to provide for the Requires* callbacks.

      Then there is the line number evaluation, which I haven't started on.

      Building a Debugger by Sy Brand (https://nostarch.com/building-a-debugger) is an awesome book if you want to learn more about this. It covers DWARF 4 and you build a full debugger in C++17 for Linux/x86_64. Can't recommend that book highly enough!

  • wavemode 10 hours ago
    Several of the examples seem to be empty (e.g. https://github.com/tmcgilchrist/durin/blob/master/example/dw...)

    Also, the link to OPAM documentation leads to a 404

    • lambda_foo 8 hours ago
      It is heavily WIP at the moment so I haven't published to opam just yet. You'll need to compile from source if you want to try it out. I'm filling in examples as I need them and publishing code when it isn't too terrible to look at.
      • wavemode 1 hour ago
        Ah, no worries. I'm just now realizing that you weren't even the one who submitted this to HN.