· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.UNIX —› Fasm < GAS

. 1 . 2 . >>

Посл.отвђт Сообщен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

вот они

_1328689072__tst_gas


Дата: Окт 24, 2004 20:01:23

блин, сразу 2 прикрепить не получается

1408094176__tst_fasm


Дата: Окт 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 не показывает, видимо потому что одна секция а он
такого не ожидал ;-)

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064