Kodewerx https://www.kodewerx.org/forum/ |
|
gnu-objcopy binary output https://www.kodewerx.org/forum/viewtopic.php?f=2&t=7113 |
Page 1 of 1 |
Author: | HyperHacker [ Sun Nov 22, 2009 11:30 pm ] |
Post subject: | gnu-objcopy binary output |
I've compiled binutils for MIPS and I can assemble just fine, but using objcopy to dump the raw binary is not working. Input file: Code: .ascii "ohai thar" Run through:.align 2 ADDIU $zero, $zero, 0x1234 Code: mips-unknown-linux-gnu-as -EB -march=vr4300 -mtune=vr4300 --warn test.asm -o test.elf test.elf is:Code: 00000000 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 |.ELF............| I can clearly see my code at 0x40. However, I then use this to strip out just the actual instructions:00000010 00 01 00 08 00 00 00 01 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 a4 20 00 11 00 00 34 00 00 00 00 00 28 |.... ....4.....(| 00000030 00 09 00 06 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 6f 68 61 69 20 74 68 61 72 00 00 00 24 00 12 34 |ohai thar...$..4| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 2e 73 79 6d 74 61 62 |..........symtab| 00000070 00 2e 73 74 72 74 61 62 00 2e 73 68 73 74 72 74 |..strtab..shstrt| 00000080 61 62 00 2e 74 65 78 74 00 2e 64 61 74 61 00 2e |ab..text..data..| 00000090 62 73 73 00 2e 72 65 67 69 6e 66 6f 00 2e 70 64 |bss..reginfo..pd| 000000a0 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |r...............| 000000b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1b |................| 000000d0 00 00 00 01 00 00 00 06 00 00 00 00 00 00 00 40 |...............@| 000000e0 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 10 |................| 000000f0 00 00 00 00 00 00 00 21 00 00 00 01 00 00 00 03 |.......!........| 00000100 00 00 00 00 00 00 00 50 00 00 00 00 00 00 00 00 |.......P........| 00000110 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00 27 |...............'| 00000120 00 00 00 08 00 00 00 03 00 00 00 00 00 00 00 50 |...............P| 00000130 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 |................| 00000140 00 00 00 00 00 00 00 2c 70 00 00 06 00 00 00 02 |.......,p.......| 00000150 00 00 00 00 00 00 00 50 00 00 00 18 00 00 00 00 |.......P........| 00000160 00 00 00 00 00 00 00 04 00 00 00 18 00 00 00 35 |...............5| 00000170 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 68 |...............h| 00000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 |................| 00000190 00 00 00 00 00 00 00 11 00 00 00 03 00 00 00 00 |................| 000001a0 00 00 00 00 00 00 00 68 00 00 00 3a 00 00 00 00 |.......h...:....| 000001b0 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 |................| 000001c0 00 00 00 02 00 00 00 00 00 00 00 00 00 00 02 0c |................| 000001d0 00 00 00 60 00 00 00 08 00 00 00 06 00 00 00 04 |...`............| 000001e0 00 00 00 10 00 00 00 09 00 00 00 03 00 00 00 00 |................| 000001f0 00 00 00 00 00 00 02 6c 00 00 00 01 00 00 00 00 |.......l........| 00000200 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 |................| 00000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000220 00 00 00 00 00 00 00 00 03 00 00 01 00 00 00 00 |................| 00000230 00 00 00 00 00 00 00 00 03 00 00 02 00 00 00 00 |................| 00000240 00 00 00 00 00 00 00 00 03 00 00 03 00 00 00 00 |................| 00000250 00 00 00 00 00 00 00 00 03 00 00 04 00 00 00 00 |................| 00000260 00 00 00 00 00 00 00 00 03 00 00 05 00 |.............| 0000026d Code: mips-unknown-linux-gnu-objcopy test.elf -O binary test.dmp And test.dmp now contains 24 zero bytes. The only other thing I've got it to do is if I stick a ".section foobar" at the top of my source, and add "-j foobar" to the objcopy flags, then test.dmp contains nothing at all. |
Author: | Parasyte [ Mon Nov 23, 2009 5:21 pm ] |
Post subject: | Re: gnu-objcopy binary output |
You might want to put the code into the .text section. That's a good place to start. Also try objdump, see if you can get any info out of the ELF at all. And remember that ELF format is not limited to any single architecture; you should be able to run the local binutils from your distribution on any ELFs generated by your MIPS build. |
Author: | HyperHacker [ Mon Nov 23, 2009 5:45 pm ] |
Post subject: | Re: gnu-objcopy binary output |
I tried putting it in all different sections. objdump can disassemble it but objcopy can't copy it. The assembler apparently is horribly broken anyway. It mangles my instructions. e.g.: LUI $k1, 0x8034 LB $t1, 0xB218($k1) becomes something along the lines of: LUI $k1, 0x8033 LUI $t1, 0x0001 ADDIU $t1, $t1, 0xB218 ADD $t1, $t1, $k1 LB $t1, 0x0000($t1) Worse, it inserts NOPs in my branch delays, which just breaks the code: BEQ $s2, $s1, end NOP ADDIU $t2, $t2, 0x0001 BNEL $s2, $t0, for NOP ADDIU $s0, $s0, 0x0004 Then there's the completely meaningless error messages with random control characters in them. IIRC it was saying something about "invalid section for operation on L0[some control characters here]" for an instruction like ADDIU $t1, $t1, 0xFFFC. (Anything where the immediate value is more than 0x7FFF.) |
Author: | Hextator [ Mon Nov 23, 2009 6:48 pm ] |
Post subject: | |
I already told you about the latter issue. Like I said, some immediate or meta variable of yours has a width that is larger than the context you're using it in. Now, I won't argue whether the error message is meaningful, but apparently your assembler thinks that 0x8000 and above uses too many bits. It PROBABLY thinks that ADDIU works the way it's supposed to and therefore can't use negative values (I guess it thinks 0x8000 is negative?). If I had to guess. |
Author: | Parasyte [ Tue Nov 24, 2009 6:26 pm ] |
Post subject: | Re: gnu-objcopy binary output |
Regardless, it should not be rewriting the input. It's an assembler; not an optimizing compiler. Now I'm curious, is the MIPS port still alive? I know GNU likes to remove inactive ports from their source tree... This is the reason. (New features in the suite break old code that isn't getting updated to match the rest of the core.) That's my current theory on the matter. |
Author: | Hextator [ Tue Nov 24, 2009 11:47 pm ] |
Post subject: | |
My mips-elf-as doesn't work either, now that I've actually tried it. Shit happens. My mips-elf-gcc compiles and assembles fine, though. |
Author: | HyperHacker [ Wed Nov 25, 2009 1:06 am ] |
Post subject: | Re: gnu-objcopy binary output |
Wait, it works from GCC? It doesn't just generate code and pass it on to 'as'? (I hate how 'as' is also a word... makes it confusing <.<) |
Author: | Parasyte [ Wed Nov 25, 2009 12:58 pm ] |
Post subject: | Re: gnu-objcopy binary output |
I used to prefix my Google searches on the subject with "gas" ... but that's also a word. "GNU as" is unique enough to be useful though. |
Author: | Hextator [ Wed Nov 25, 2009 1:10 pm ] |
Post subject: | Re: gnu-objcopy binary output |
HyperHacker wrote: Wait, it works from GCC? It doesn't just generate code and pass it on to 'as'? (I hate how 'as' is also a word... makes it confusing <.<) I didn't try it with inline assembly, mind you, but it might actually work. When I did -S to get the compiler's assembly output, the instructions looked much more like what we're used to. Note that it actually makes an executable for a real MIPS arch, so you're going to be trimming lots of excess binary if you compile C code. |
Page 1 of 1 | All times are UTC - 8 hours [ DST ] |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |