76543210 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF
00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000010: 0000 4269 6e61 7279 0000 0000 0000 0000 ..Binary........
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0054 3030 6c73 0000 0000 0000 .....T00ls......
00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 5375 6d6d 6974 0000 ........Summit..
00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070: 0000 0000 0000 3230 3232 0000 0000 0000 ......2022......
00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................
The *Binary Tools Summit 2022* is an informal, technical, online event
oriented to authors, users and enthusiasts of FLOSS programs that deal
with binary data.
This includes binary editors, libraries to encode and decode data,
parser generators, binary data description languages and frameworks,
binary formats and encodings, assemblers, debuggers, reverse engineering
suites, and the like.
The goal of this event is for developers to get in touch with each
other, introduce their tools, have interesting and hopefully productive
discussions, and finally what is most important: to have fun.
The venue of the event will be an instance of the Big Blue Button web
conferencing system, accessible using Firefox, Chromium and other web
browsers. We will be having a single track that will span for three
days during a weekend.
Dates
=====
The summit will be held on the first weekend of March 2022, From
Friday 4 to Sunday 6.
How to join the conference
==========================
Click the link below to access the online conference:
https://t00ls.lwn.net/b/track
Contact
=======
You can reach us at mailto:binary-tools-summit@gnu.org.
We are also in the IRC channel #binary-tools in irc.libera.chat.
Attending the event
===================
This event is open to everyone and no registration is necessary in
order to attend; however, we would appreciate if you send us an email
stating your intention to attend so we can have an idea of the number
of attendants beforehand.
That way we will also be able to contact you in case something changes
and a reminder before the conference starts.
Schedule
========
All dates and times below are expressed in CET (GMT +1).
See below in this page for the talk abstracts, slides and video
recording.
Friday 4 March 2022
~~~~~~~~~~~~~~~~~~~
Time Activity Presenter
---------------------------------------------------------------------------------
17:30 Welcome and introduction *
---------------------------------------------------------------------------------
18:00 fq - jq for binary formats Mattias Wadman
---------------------------------------------------------------------------------
19:00 binfmt_misc - execute it!!! Aaron Grothe
https://www.grothe.us
---------------------------------------------------------------------------------
20:00 GNU poke, the extensible editor for structured Jose E. Marchesi
binary data https://jemarch.net
GNU Project.
---------------------------------------------------------------------------------
22:00 End of day
Saturday 5 March 2022
~~~~~~~~~~~~~~~~~~~~~
Time Activity Presenter
-------------------------------------------------------------------------------
16:00 Declarative language FlexT for analysis and Alexei Hmelnov
documenting of binary data formats and its Institute for system
use for data reading code generation. Dynamics and Control
Theory of Siberian Branch
of Russian Academy of
Sciences.
-------------------------------------------------------------------------------
17:00 poked, GNU poke beyond the CLI Mohammad-Reza Nabipoor
GNU Project.
-------------------------------------------------------------------------------
19:00 *talk canceled*
-------------------------------------------------------------------------------
20:00 On binary diffing and patching Jose E. Marchesi
https://jemarch.net
GNU Project.
-------------------------------------------------------------------------------
21:00 End of day
Sunday 6 March 2022
~~~~~~~~~~~~~~~~~~~
Time Activity Presenter
---------------------------------------------------------------------------------
16:00 BinDat: Bin there, done Dat Stefan Monnier
Université de Montréal
---------------------------------------------------------------------------------
17:00 The Trojan Poke: embedding GNU poke in your Mohammad-Reza Nabipoor
own program GNU Project.
---------------------------------------------------------------------------------
18:00 GNU Jitter and the illusion of simplicity Luca Saiu
or http://ageinghacker.net
Copying, patching and combining GNU Project.
compiler-generated code in executable memory
or
The Anarchist's guide to GCC
or
The fun of playing with fire
---------------------------------------------------------------------------------
20:00 Collaboration between tools *
---------------------------------------------------------------------------------
22:00 End of day
Abstracts
=========
fq for binary formats
~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/fq-bts2022-v1.pdf
Video: https://www.youtube.com/watch?v=GJOq_b0eb-s
fq is inspired by the well known jq tool and language and allows you
to work with binary formats the same way you would using jq. In
addition it can also present data similar to a hex viewer, transform,
slice and concatenate binary data, supports nested formats and has an
interactive REPL with auto-completion.
It was originally designed to query, inspect and debug codecs and
metadata in media files and containers like mp4, flac, mp3, jpeg. But
has since been extended to support a variety of formats like
executables, packet captures including TCP reassembly and
serialization formats like ASN1 BER, Avro, CBOR, protobuf and a lot
more.
In summary it aims to be something like jq, hexdump, dd and gdb
combined into one.
By Mattias Wadman.
binfmt_misc - execute it!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/binfmt-misc.pdf
Video: https://www.youtube.com/watch?v=P_Rsvi8-pY8
Binfmt_misc allows the Linux Kernel to understand additional
executable file formats and passes them to user space applications for
execution. This is used by some emulators and virtual machines.
This talk will be a quick introduction to this capability and
hopefully will give some ideas a few ideas about what this capability
can be used/abused for :-)
By Aaron Grothe.
GNU poke, the extensible editor for structured binary data
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/poke.pdf
GNU poke (https://jemarch.net/poke) is an interactive, extensible
editor for binary data. Not limited to editing basic entities such as
bits and bytes, it provides a full-fledged procedural, interactive
programming language designed to describe data structures and to
operate on them.
In this talk I will be introducing the tool, its fundamentals, explain
how it works, show some implementation details, and highlight what is
new in the recently released poke 2.1.
By Jose E. Marchesi.
FlexT, analysis and documenting of binary data formats
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/FlexTBinTools.pdf
Video: https://www.youtube.com/watch?v=BbIS3nj5WO0
The language FlexT (acronym for Flexible Types) is designed for
specification of binary data formats. Its main statements are data
type definitions that resemble type definitions of imperative
programming languages, but are more flexible. For example, the FlexT
data types may contain subparts of variable size and may have
parameters.
The primary purpose of the FlexT interpreter is to display the binary
data in accordance with the format specification in a human-readable
form. Typically the next step after studying some data format is to
write a code for its processing. That’s why we have developed the data
reading code generator, which completely automates this task for the
substantial part of the data formats described in FlexT. It can
generate the data reading module and also the test program, which
demonstrates the correct usage of the module to solve the data
visualization task.
By Alexei Hmelnov.
poked, GNU poke beyond the CLI
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/poked_binary-tools-summit-2020.pdf
Video: https://www.youtube.com/watch?v=5FN5uhcoAgc
GNU poke is about manipulating structured binary data. Currently there
is only one user interface (UI) for the `poke' program. It's a REPL
program. And it has all the limitations of a REPL program. I developed
a daemon program called `poked' and a bunch of small programs to
interact with the daemon (the poklets). The `poked' is the "model" (in
Smalltalk 80 sense of word) and the poklets are the view/controllers.
It's an extensible architecture and many poklets can work
simultaneously with a single `poked` to make a rich and featureful
user experience.
This talk will discuss the architecture, use and implementation of
`poked' and poklets.
By Mohammad-Reza Nabipoor.
BinDat: Bin there, done Dat
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/bindat.pdf
Video: https://www.youtube.com/watch?v=QbYDnw2dlGY
The BinDat library is a binary data description DSL for Emacs, written
in Emacs Lisp using its macro preprocessing facilities. It was added
to Emacs 20 years ago by Kim Storm and has not seen much use since,
sadly. Prompted by a bug report, I have recently rewritten it in way
that both speeds it up and makes it significantly more flexible. I
hope that it will make it a bit more popular.
In this presentation I will give a taste of what BinDat is like, and
how I made it more flexible. I intend to focus on the design of the
BinDat DSL more than on its performance or its implementation.
By Stefan Monnier.
The Trojan poke: embedding GNU poke in your own program
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides:
https://binary-tools.net/trojan-poke_binary-tools-summit-2022.pdf
Video: https://www.youtube.com/watch?v=yLur7jqqRMA
GNU poke is about manipulating structured binary data. Most of the
functionality, in particular, the Poke compiler and IO handling, is
not in `poke' application, but instead in a shared library called
`libpoke'. Poking at structured binary data is a rather general
activity that is useful in a very wide range of different contexts.
Rather than making `poke' capable of supporting different contexts
(e.g., becoming a debugger, a filesystem editor, disk partitioner, an
assember, and etc.), one can assimilate `libpoke' in these
programs. In short, if the program will not come to `poke', `poke'
will go to the program!
This talk will describe the part of the libpoke API that provides the
integration mechanism. Then will show in detail a couple of examples
of this kind of integration including poke in GDB, the GNU Debugger.
Resistance is futile!
By Mohammad-Reza Nabipoor.
GNU Jitter and the illusion of simplicity
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/jitter-binary-tools-summit.pdf
Video: https://www.youtube.com/watch?v=WXtCKeqIXnY
GNU Jitter is a generator of portable and efficient language virtual
machines; a Jittery VM lies at the heart of GNU poke. Jitter achieves
high performance by:
- machine-generating C code;
- compiling the generated code ahead-of-time with GCC;
- copying, patching and recombining pieces of native code at run time
into executable memory.
GCC was definitely _not_ designed for this task.
In this talk about the inner workings of Jitter I will show how to
coerce the compiler into generating code suitable for run-time
replication and how to maintain correctness, without the user
noticing, when GCC optimisations play against us. In a task where
many have failed before I believe I can now show a recipe for success.
http://ageinghacker.net/scratch-gnu/jitter-0.9.285.tar.gz
http://ageinghacker.net/scratch-gnu/structured-simple-1.0.tar.gz
By Luca Saiu.
Structured binary diffs
~~~~~~~~~~~~~~~~~~~~~~~
Slides: https://binary-tools.net/bindiff.pdf
Video: https://www.youtube.com/watch?v=MUb8rD5mPvE
Diffing and patching is very well understood for line-oriented text
data, and implemented in a very satisfying way: what would we do
without diff and patch? However, the situation is very different when
it comes to binary data.
This talk is divided in two parts. First, we will do a short survey
on how this problem has been approached in programs like binary
editors and other tools, highlighting the pros and cons of each case.
We shall see that diffing binary data is not something that can likely
be solved by a fit-for-all solution: binary data comes in very
different shapes. It is not the same to compare raw bytes, assembled
instructions, or structured binary data. Then we will propose a diff
format for structured binary data, and demonstrate a prototype written
in GNU poke.
By Jose E. Marchesi
Thanks
======
The BBB instance is provided by Linux Weekly News