fasm: хрень какая-та...

Тема в разделе "WASM.HEAP", создана пользователем CodeWorld, 31 окт 2005.

  1. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Короче я посмотрел. Там дело не тока в call. Там вообще каша.. структура разъехалась на 8 байт больше чем положена. А call делается на 7 байтов позже чем нужно


    Код (Text):
    1.  
    2. seg000:000021C1                 db    0 ;  
    3. seg000:000021C2                 db    0 ;  
    4. seg000:000021C3                 db    0 ;  
    5. seg000:000021C4                 db    0 ;  
    6. seg000:000021C5                 db    0 ;  
    7. seg000:000021C6                 db    0 ;  
    8. seg000:000021C7                 db    0 ;  
    9. seg000:000021C8                 db    0 ;  
    10. seg000:000021C9                 db    0 ;  
    11. seg000:000021CA                 db    0 ;  
    12. seg000:000021CB                 db    0 ;  
    13. seg000:000021CC                 db    0 ;  
    14. seg000:000021CD                 db    0 ;  
    15. seg000:000021CE                 db    0 ;  
    16. seg000:000021CF                 db    0 ;  
    17. seg000:000021D0                 db    0 ;  
    18. seg000:000021D1                 db    0 ;  
    19. seg000:000021D2                 db    0 ;  
    20. seg000:000021D3                 db    0 ;  
    21. seg000:000021D4                 db    0 ;  
    22. seg000:000021D5                 db    0 ;  
    23. seg000:000021D6                 db    0 ;  
    24. seg000:000021D7                 db    0 ;  
    25. seg000:000021D8
    26.  
    27.  
    28. seg000:000021D8 loc_21D8:                             ;CODE XREF: seg000:00001F45
    29. seg000:000021D8                 add     [eax+52h], dl
    30. seg000:000021DB                 push    ecx
    31. seg000:000021DC                 push    ebp
    32. seg000:000021DD                 push    esi
    33. seg000:000021DE                 push    edi
    34. seg000:000021DF                 mov     eax, ebx
    35.  




    Тот же кусок из сорцов:


    Код (Text):
    1.  
    2.   SomeObject TObject
    3.  
    4. f1:
    5.   push eax edx ecx ebp esi edi
    6.   mov eax,ebx
    7.   ....
    8.  




    И напомню саму структуру:


    Код (Text):
    1.  
    2.  struc TObject
    3.     {
    4.    dd  0x0
    5.    dd  0x0
    6.    dd  0x0
    7.    dd  0x0
    8.    dd  0x0
    9.    dd  0x0
    10.     }
    11.  




    Только стоит мне кинуть SomeObject TObject в конец файла и получаю это:


    Код (Text):
    1.  
    2. seg000:000021C1 sub_21C1        proc near               ; CODE XREF: seg000:00001F45
    3. seg000:000021C1                 push    eax
    4. seg000:000021C2                 push    edx
    5. seg000:000021C3                 push    ecx
    6. seg000:000021C4                 push    ebp
    7. seg000:000021C5                 push    esi
    8. seg000:000021C6                 push    edi
    9. seg000:000021C7                 mov     eax, ebx
    10.  




    Ну что, я тогда отправлю Томашу?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    CodeWorld

    Всё равно не верю :)

    Лучше приведи куски дампов, скорее всего это неправильный дизасм: add [eax+52h], dl, это когда метка на 1 байт выше.





    Пересчитал по твоему листингу - 24 байта :)





    А судя по листингу, на 1 байт раньше. Но опять таки, подозреваю дизасм.
     
  3. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    IceStudent, точняк. я считал, что структура весит 16 байт, вот и решил что она мутировала на 8 байт :lol:



    Посмотрел дамп, теперь можно выносить диагноз =) Call делается на 1 байт раньше:


    Код (Text):
    1.  
    2. seg000:000021C0  C3 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
    3. seg000:000021D0  00 00 00 00 00 00 00 00-00 50 52 51 55 56 57 89
    4. seg000:000021E0  D8 B9 00 04 00 00 31 D2-F7 F1 83 FA 00 74 01 40
    5.  




    А вот не битый фрагмент:
    Код (Text):
    1.  
    2. seg000:000021C0  C3 50 52 51 55 56 57 89-D8 B9 00 04 00 00 31 D2
    3. seg000:000021D0  F7 F1 83 FA 00 74 01 40-53 89 C3 E8 1E 01 00 00
    4.  
     
  4. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Я намылил Томашу, пока молчит
     
  5. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Однако мыло он не часто проверяет. Тишина =)
     
  6. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    этот фасм весь сыпится. Чуть что пошевелишь тут же все крушится. Я продолжил писать файл с SomeObject. Добавил туда несколько констант и кода. Все работает. Стоит убрать следующий инклуд в файле X, за инклудом файла с СамОбжект и опять пэйдж фол на нулях. Теперь глюк в функции f2 которая рядом с f1. Однако все несоколько наоборот. call кривой в самой функции f2, которая call-ится на ф которая в одном файле со структурой (!не ее экземляром). Но это не так важно. Похоже про структуру можно забыть, фасм запутался в самих смещениях. Может я достиг какого то предела? call опять рано ровно на 1 байт, и опять попадает на данные/нули (перед кодом у мя двойное слово объявлено).



    Все хватит. Даже сам Томаш не спешит устранять ошибку. Пора перебераться на насм 8)
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    CodeWorld

    Слушай, вышли сорцы. Думаю, всё прозаичней. За копирайты не боись, интересы у меня другие. Но хочу взглянуть, правда ли дело в фасме.
     
  8. CodeWorld

    CodeWorld New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2005
    Сообщения:
    46
    Поспешил, ложная тревога. Буду искать ошибку у себя =)