|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 24, 2004 11:11:26 объясните плз, не совсем понятно: почему прога, написанная на Fasm'е получается намного меньше, чем аналогичная на GAS'е? может я в GAS'е опцию какую-нибудь пропускаю? хотя все делаю по книжке Зубкова. :( |
|
|
Дата: Окт 24, 2004 11:44:09 Дазассемблируй фасмовский вариант - fasm так и наровит чего-нить оптимизировать. Сравни заголовки PE, может там разное выравнивание секций или даже gasm еще одну секцию прибавил. |
|
|
Дата: Окт 24, 2004 11:51:15 Я в этом мало понимаю, но попробую угадать: дело в статической линковке libc при использовании GNU tools. PS Кстати, fasm port with libc тоже существует. |
|
|
Дата: Окт 24, 2004 13:08:08 не похоже, что дело в libc, я ведь писал код без использования его библиотек. на первый взгляд GAS прибавил в конец программы какой-то код, который можно без проблем выкусить обычным редактором и все будет работать. щас посмотрю че там добавляется ;) |
|
|
Дата: Окт 24, 2004 13:38:47 все понятно, что ничего не понятно дизасмлю objdump'ом GAS'овский ELF (тот, который с доп. куском кода) - все нормально, но в листинге ни намека на этот лишний кусок. то же самое делаю с Fasm'овским ELF'ом - листинга нет, только написан тип файла. после этого вырезаю из первого ELF'а лишний код, прога исполняется нормально. пытаюсь дизассемблить - хрен там, пишет "file truncated" сдается мне, что эта лишняя бодяга описывает формат файла (наверно я ошибаюсь) |
|
|
Дата: Окт 24, 2004 13:57:11 · Поправил: Asterix Сравнение нужно начинать со сравнения количества секций в обоих вариантах файлов, и вообще не было сказано насколько различаются запускные файлы.. Я честно говоря даже не знаю есть ли в elf файлах секции %) |
|
|
Дата: Окт 24, 2004 18:39:24 · Поправил: freeze_foton дык, как я сравню кол-во секций в исполняемых файлах, когда из них могу дизассемблировать только 1 :( к тому же в листинге этой программы все нормально, 2 секции, как я и объявлял, но глазами-то я вижу, что там еще какая-то зараза притаилась! может там и есть какая-то доп. секция, но как мне получить ее код? В итоге у меня получается fasm-elf ок.150-160 байт, а gas-elf ок.450-500 байт. Не измененный код gas'a дизасмится нормально, а fasm'a - нет. |
|
|
Дата: Окт 24, 2004 19:04:37 freeze_foton Приаттач что-ли файлы, посмотрим что там у тя не "дизасмится" |
|
|
Дата: Окт 24, 2004 19:08:08 freeze_foton Кстати, количество секций можно посмотреть вьювером, например HiEW. |
|
|
Дата: Окт 24, 2004 19:59:57 · Поправил: freeze_foton |
|
|
Дата: Окт 24, 2004 20:01:23 |
|
|
Дата: Окт 24, 2004 20:56:00 · Поправил: B_108
-bash.no_hist-2.05b$ objdump -x gas
gas: file format elf32-i386
gas
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x08048074
Program Header:
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x0000008f memsz 0x0000008f flags r-x
LOAD off 0x00000090 vaddr 0x08049090 paddr 0x08049090 align 2**12
filesz 0x00000009 memsz 0x0000000c flags rw-
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000001b 08048074 08048074 00000074 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .got.plt 00000000 08049090 08049090 0000009c 2**0
CONTENTS
2 .data 00000009 08049090 08049090 00000090 2**2
CONTENTS, ALLOC, LOAD, DATA
3 .bss 00000000 0804909c 0804909c 0000009c 2**2
ALLOC
и вот fasm
-bash.no_hist-2.05b$ objdump -x fasm
fasm: file format elf32-i386
fasm
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x08048074
Program Header:
LOAD off 0x00000074 vaddr 0x08048074 paddr 0x08048074 align 2**12
filesz 0x0000001b memsz 0x0000001b flags r-x
LOAD off 0x0000008f vaddr 0x0804908f paddr 0x0804908f align 2**12
filesz 0x0000000a memsz 0x0000000a flags r--
|
|
|
Дата: Окт 24, 2004 21:12:07 readelf -e fasm просто "падает" Section to Segment mapping: Segment Sections... assertion "string_table != NULL" failed: file "/opt/usr/src/gnu/usr.bin/binutils/readelf/../../../../contrib/binutil s/binutils/readelf.c", line 2916 Abort trap (core dumped) |
|
|
Дата: Окт 25, 2004 00:50:22 freeze_foton Просто ты не стандартно слепил файл, т.е. не так как это принято, видимо у fasm'ового файла получилась только одна секция, gas же всё сделал автоматом, раскидал все данные куда нужно, т.е. данные отдельно код отдельно. А так вот тебе дизассемблированный листинг, кстати действительно размер отличается из-за количества секций: LOAD:08048074 ; File Name : C:\Downloads\1408094176__tst_fasm LOAD:08048074 ; Format : ELF (Executable) LOAD:08048074 ; LOAD:08048074 LOAD:08048074 model flat LOAD:08048074 LOAD:08048074 ; ====================================================================== ===== LOAD:08048074 LOAD:08048074 ; Segment type: Pure code LOAD:08048074 ; Segment permissions: Read/Execute LOAD:08048074 LOAD segment mempage public 'CODE' use32 LOAD:08048074 assume cs:LOAD LOAD:08048074 ;org 8048074h LOAD:08048074 assume es:nothing, ss:nothing, ds:LOAD, fs:nothing, gs:nothing LOAD:08048074 LOAD:08048074 ; --------------- S U B R O U T I N E --------------------------------------- LOAD:08048074 LOAD:08048074 LOAD:08048074 public start LOAD:08048074 start proc near LOAD:08048074 BA 0A 00 00 00 mov edx, 0Ah LOAD:08048079 B9 8F 90 04 08 mov ecx, offset unk_804908F LOAD:0804807E 31 DB xor ebx, ebx LOAD:08048080 43 inc ebx LOAD:08048081 B8 04 00 00 00 mov eax, 4 LOAD:08048086 CD 80 int 80h ; LINUX - sys_write LOAD:08048088 31 DB xor ebx, ebx LOAD:0804808A 89 D8 mov eax, ebx LOAD:0804808C 40 inc eax LOAD:0804808D CD 80 int 80h ; LINUX - sys_exit LOAD:0804808D start endp LOAD:0804808D LOAD:0804808D LOAD ends LOAD:0804808D LOAD:0804908F ; ====================================================================== ===== LOAD:0804908F LOAD:0804908F ; Segment type: Pure data LOAD:0804908F ; Segment permissions: Read LOAD:0804908F LOAD segment mempage public 'DATA' use32 LOAD:0804908F assume cs:LOAD LOAD:0804908F ;org 804908Fh LOAD:0804908F 54 unk_804908F db 54h ; T ; DATA XREF: start+5o LOAD:08049090 65 db 65h ; e LOAD:08049091 73 db 73h ; s LOAD:08049092 74 db 74h ; t LOAD:08049093 5F db 5Fh ; _ LOAD:08049094 6D db 6Dh ; m LOAD:08049095 6F db 6Fh ; o LOAD:08049096 64 db 64h ; d LOAD:08049097 0A db 0Ah LOAD:08049098 0D db 0Dh LOAD:08049098 LOAD ends LOAD:08049098 LOAD:08049098 LOAD:08049098 end start |
|
|
Дата: Окт 25, 2004 01:08:35 GAS: +- Num Name Type Flg VirtAddr Offset Size Link Info Algn-+ ¦ 0 NULL ... 00000000 00000000 00000000 0 0 0 ¦ ¦ 1 .text PROG XA. 08048074 00000074 0000001B 0 0 4 ¦ ¦ 2 .got.plt PROG ..W 08049090 0000009C 00000000 0 0 1 ¦ ¦ 3 .data PROG .AW 08049090 00000090 00000009 0 0 4 ¦ ¦ 4 .bss BSS .AW 0804909C 0000009C 00000000 0 0 4 ¦ ¦ 5 .shstrtab STR ... 00000000 0000009C 00000025 0 0 1 ¦ ¦ ¦ А у fasm'овского HiEW не показывает, видимо потому что одна секция а он такого не ожидал ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064 |