How to read main code inside main code in Arduino?
Interesting. If you want hex you have to tell it to print in hex. If I change your display line to:

Serial.println(displayInt, HEX); 


Then I get:

940C
3594
35
C00
940C


Compare this to what the decompiled file looks like:

   0:   0c 94 35 00     jmp 0x6a    ; 0x6a &lt;__ctors_end&gt;
   4:   0c 94 5d 00     jmp 0xba    ; 0xba &lt;__bad_interrupt&gt;
   8:   0c 94 5d 00     jmp 0xba    ; 0xba &lt;__bad_interrupt&gt;


If you take the endianness into account (you are reading words, not bytes) then it is the same.



If you change it to read bytes it looks better:

void setup() {
  Serial.begin(115200);
  while (!Serial);  // wait for serial port to connect. Needed for native USB

  for(int k = 0; k &lt; 12; k++) {
    byte c = pgm_read_byte(k);
    char buf [3];
    sprintf (buf, "%02X", c);
    Serial.println(buf); 
  }
}

void loop() {
}


I increased the baud rate to 115200. I'm always puzzled when people use 9600 baud. Do you hanker for the olden days, when 9600 baud modems were the fastest you could get?

That gives this result:

0C
94
35
00
0C
94
5D
00
0C
94
5D
00


As you can see, it is exactly correct.