Das Problem ist ja nicht, den Hex-Code anzuhängen, sondern den Code zu lokatieren bzw. er muss so generiert sein, daß er unabhängig von seiner Lokatierung ist. Ausserdem muss die Anwendung, die das Zeug lädt, wissen, wo sie das Zeug findet.

Am einfachsten geht das mit Daten, die unabängig von Lokatierungen sind (also keine Sprung- oder Codeadressen oder sowas enthalten). Typisches Beispiel sind Kalibrierungsdaten. Die Daten werden fest irgendwo ins Flash lokatiert und die Applikation kann darauf zugreifen bzw weiß, wo die Daten liegen (werden). Nach der Kalibrierung werden die Daten an diese Stelle geflasht (Bootloader oder wie auch immer). Um den Ort festzulegen, legst du die Daten in eine eigene Section, deren Ablageort du im Linker Description File festlegst (bei avr-ld zumindest). Alternativ lokatierst du das Zeug ins Flash und übergibst dem Bootloader die Adresse.

Einige Makros zur Bootloader-Unterstützung findest du im Header avr/boot.h.