На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> Fatal:32-bit record encountered in modul , Tasm 5.0
    Что за ошибка и как с ней бороться? Обьектный файл создаётся всё безпроблем, а вот линковщик ни ленкует и создаёт файл мап с такой ошибкой. Исходник вот
    ExpandedWrap disabled
      title
      .386
      .model flat, stdcall
      std_output_handle equ -11
      extrn getstdhandle@4:proc
      extrn exitprocess@4:proc
      extrn writeconsolea@20:proc
      .data
      mess     db      "FFFFF"
       endl equ <odh, 0ah>
       messagesize dd ($-mess)
       consolehandle dd 0
       byteswritten db ?
       .code
       main proc
       push std_output_handle
       call getstdhandle@4
       mov ecx,small offset mess
       mov consolehandle,ecx
       push 0
       push offset byteswritten
       push messagesize
       push offset mess
       push consolehandle
       call writeconsoleA@20
       
       push 0
       call exitprocess@4
       main endp
       end main


    Добавлено
    Поискала, нашла что нужно добавить ключ при линковке /3, но когда я его добовляю, то другие ошибки
    ExpandedWrap disabled
       Start  Stop   Length Name               Class
       
       00000H 00030H 00031H _TEXT              CODE
       00034H 00042H 0000FH _DATA              DATA
       
      Error: Undefined symbol GETSTDHANDLE@4 in module file.ASM
      Fatal: Bad object file record in module file.ASM near module file offset 0x000005F6
    Сообщение отредактировано: rikitikitavi -
      Привет rikitikitavi!
      Для начала пройдемся по
      Цитата rikitikitavi @
      Исходник вот

      Это полный исходник? А где точка входа? Какай асм используешь? Если Тасм, то можно сделать все гораздо проще и красивее:
      ExpandedWrap disabled
        includelib "kernel32.lib"
         
        PROCDESC GetStdHandle   WINAPI :DWORD
        PROCDESC ExitProcess    WINAPI :HANDLE
        PROCDESC WriteConsoleA  WINAPI :HANDLE, :LPVOID, :DWORD, :LPDWORD, :LPVOID
        .......
        call WriteConsoleA, [consolehandle], offset mess, [messagesize],\
                            offset byteswritten, NULL

      Или я не прав?
      Цитата rikitikitavi @

      ExpandedWrap disabled
        mess     db      "FFFFF"
         endl equ <odh, 0ah>
         messagesize dd ($-mess)


      Небольшая оплошность, ты создала макрос ENDL, а вот вставить его забыла, делай так:
      ExpandedWrap disabled
         endl equ <odh, 0ah>
         mess     db      "FFFFF", endl
         messagesize dd ($-mess)

      Цитата rikitikitavi @

      ExpandedWrap disabled
         byteswritten db ?


      Это должно быть DWORD, так как
      Цитата

      lpNumberOfCharsWritten
      Points to a 32-bit variable that receives the number of characters actually written.

      Есть еще одна небольшая ошибочка ;)
      Цитата rikitikitavi @

      ExpandedWrap disabled
         push std_output_handle
         call getstdhandle@4
         mov ecx,small offset mess
         mov consolehandle,ecx     <--- ты наверное хотела написать EAX?


      То есть у тебя хэндл консоли уходит в "небо" ;)
      Ну а теперь насчет компиляции:
      Цитата rikitikitavi @
      Undefined symbol GETSTDHANDLE@4 in module file.ASM

      Судя по всему ты не указала опции различать регистр в глобальных именах, это обязательно нужно, тогда у тебя и объявления неправильные, посмотри как это у меня сделано :rolleyes: А сами либрары указывала линкеру?
      Цитата rikitikitavi @
      Bad object file record in module file.ASM near module file offset 0x000005F6

      Честно говоря сам не знаю почему такая блаж появляется, встречался с этим и в тасме и в ваткомовском линкере :wall: Лечится просто - выравниванием кода и иногда данных.
      Best Regards!
        Цитата AndNot @
        Привет rikitikitavi!

        Привет AndNot!
        Цитата AndNot @
        Это полный исходник?

        да это весь.
        Цитата AndNot @
        Если Тасм, то можно сделать все гораздо проще и красивее:

        да Тасм, ну уж извиняйте я ещё не сильна :), да действительно проще и красивее :)
        Цитата AndNot @
        Небольшая оплошность

        оплошала не спорю, если честно то здесь всё с масма, все куски кода, я соединила и перевела на тасм.
        Цитата AndNot @
        То есть у тебя хэндл консоли уходит в "небо"

        мда :)
        Цитата AndNot @
        различать регистр в глобальных именах

        да я это уже поняла.
        Цитата AndNot @
        А сами либрары указывала линкеру?

        всмысле, какие либы?
        Цитата AndNot @
        Best Regards!

        Спасибо :)
          Цитата rikitikitavi @
          да Тасм, ну уж извиняйте я ещё не сильна

          И все же советую начать именно с режима IDEAL, он почти все синтаксические ошибки отлавливает, да и неоднозначностей не допускает. Твой пример будет примерно таким:
          ExpandedWrap disabled
            IDEAL
            P586
            MODEL FLAT ,STDCALL
            SMART
            LOCALS  __
            NOJUMPS
             
            includelib "import32.lib"
             
            std_output_handle equ -11
            NULL    equ     0
             
            typedef HANDLE  DWORD
            typedef LPVOID  DWORD
            typedef LPDWORD DWORD
            typedef LPCSTR  DWORD
             
            PROCDESC GetStdHandle   WINAPI :DWORD
            PROCDESC ExitProcess    WINAPI :HANDLE
            PROCDESC WriteConsoleA  WINAPI :HANDLE, :LPCSTR, :DWORD, :LPDWORD, :LPVOID
            PROCDESC AllocConsole   WINAPI
            PROCDESC SetConsoleTitleA WINAPI :LPCSTR
             
            DATASEG
             sztitle  db      "rikitikitavi console",0
             mess     db      "FFFFF",13,10
             messagesize dd ($- offset mess)
             consolehandle dd 0
            UDATASEG
             byteswritten dd ?
             
            CODESEG
             
            proc main
             call AllocConsole
             or eax,eax
             jz __exit
             call SetConsoleTitleA, offset sztitle
             or eax,eax
             jz __exit
             call GetStdHandle, std_output_handle
             or eax,eax
             jz __exit
             mov  [consolehandle],eax
             call WriteConsoleA, eax, offset mess, [messagesize],\
                                 offset byteswritten, NULL
            __exit:
             call ExitProcess, NULL
            endp
            END main

          Цитата rikitikitavi @
          всмысле, какие либы?

          Ну в примере выше это
          ExpandedWrap disabled
            includelib "import32.lib"

          то есть библиотека импорта имен подключаемых API. Здесь либа подключается в тексте, поэтому ее можно не указывать линкеру ;) Очень удобно.
          Цитата rikitikitavi @
          Спасибо

          Да всегда пожалуйста :yes:
          Сообщение отредактировано: AndNot -
            Цитата AndNot @
            И все же советую начать именно с режима IDEAL, он почти все синтаксические ошибки отлавливает, да и неоднозначностей не допускает.

            еслиб я это знала :), вот теперь знаю :), за совет и за пример спасибо
            Цитата AndNot @
            Ну в примере выше это

            includelib "import32.lib"


            то есть библиотека импорта имен подключаемых API

            это я понимаю :), теперь буду делать так. В этом я разобралась, вопрос решён .AndNot Премного благодарна!
              Цитата rikitikitavi @
              В этом я разобралась, вопрос решён .AndNot Премного благодарна!

              Да ладно, обращайся если что :yes:
              Best Regards!
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0341 ]   [ 15 queries used ]   [ Generated: 27.04.24, 23:29 GMT ]