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

 WASM Phorum —› WASM.WIN32 —› LINK : error : Internal error during ReadSymbolTable

Посл.отвђт Сообщенiе


Дата: Ноя 11, 2004 01:06:56

Пытался тут написать Win32-программу, не импортирующую ни одной функции из DLL-ек.
Для этого нашел в памяти (через стек) kernel32.dll, её таблицу экспорта, а в ней - функцию GetProcAddress, при помощи которой, в свою очередь, получил адрес ExitProcess.

Ну, в общем-то, это к делу, наверное, не очень-то относится. Данная программа компилируется, однако, линкер вылетает с ошибкой
LINK : error : Internal error during ReadSymbolTable

  ExceptionCode            = C0000005
  ExceptionFlags           = 00000000
  ExceptionAddress         = 00436AE1
  NumberParameters         = 00000002
  ExceptionInformation[ 0] = 00000000
  ExceptionInformation[ 1] = 00000038


Причем, если в конец программы
xor eax, eax
push eax
call f_ExitProcess

(в f_ExitProcess записан адрес ExitProcess)
дописываю
call ExitProcess
(что, в принципе, влечет за собой импорт функции ExitProcess) - всё линкуется и работает замечательно.

Таким образом, чтобы заставить всё это слинковаться, в программу приходится включать "для виду" произвольные Win32-функции.

Все вышесказанное справедливо при линковании с ключом /DEBUG. С ключом /RELEASE программа работает и без "добавок".

Я использую masm32, компилирую с ключами
/c /coff /Cp /Zi /Zd /Zf /nologo /I"..",v.asm

1517975170__v.Asm


Дата: Ноя 11, 2004 04:06:50 · Поправил: q_q

NCRangeR
Какой линкер?

Сделал bat-файл
@echo off

set path=C:\MASM32\BIN;%PATH%
set include=C:\MASM32\INCLUDE;%INCLUDE%
set lib=C:\MASM32\LIB;%LIB%

ml.exe /c /coff /Cp /Zi /Zd /Zf v.asm
link.exe /DEBUG /subsystem:windows v.obj

dir v.*
запустил и получил
C:\2>do_it.bat
 Том в устройстве C не имеет метки.
 Серийный номер тома: 84F7-E3EC

 Содержимое папки C:\2

11.11.2004  07:52                3 321 v.asm
               1 файлов          3 321 байт
               0 папок   9 879 871 488 байт свободно
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000.  All rights reserved

 Assembling: v.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

 Том в устройстве C не имеет метки.
 Серийный номер тома: 84F7-E3EC

 Содержимое папки C:\2

11.11.2004  07:52                3 321 v.asm
11.11.2004  08:05                6 443 v.exe
11.11.2004  08:05                9 200 v.ilk
11.11.2004  08:05              225 422 v.obj
11.11.2004  08:05              345 088 v.pdb
               5 файлов        589 474 байт
               0 папок   9 879 273 472 байт свободно

C:\2>
PS call Exitprocess в конце исходника закомментирован.


Дата: Ноя 12, 2004 06:32:10 · Поправил: NCRangeR

Спасибо за ответ.
Однако, у меня тот же самый bat (с поправкой на то, что masm находится в g:\masm32, но, думаю, это несущественно) выдает следующее:
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997.  All rights reserved

  Assembling: v.asm
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : LNK6004: v.exe not found or not built by the last incremental link; performing full link

LINK : error : Internal error during ReadSymbolTable

  ExceptionCode            = C0000005
  ExceptionFlags           = 00000000
  ExceptionAddress         = 00436AE1
  NumberParameters         = 00000002
  ExceptionInformation[ 0] = 00000000
  ExceptionInformation[ 1] = 00000038

CONTEXT:
  Eax    = 00000000  Esp    = 0012F990
  Ebx    = 00000000  Ebp    = 3FFF0000
  Ecx    = 00000000  Esi    = 40000040
  Edx    = 0012F764  Edi    = 3FFF0000
  Eip    = 00436AE1  EFlags = 00010206
  SegCs  = 0000001B  SegDs  = 00000023
  SegSs  = 00000023  SegEs  = 00000023
  SegFs  = 0000003B  SegGs  = 00000000
  Dr0    = 0012F990  Dr3    = 00000000
  Dr1    = 3FFF0000  Dr6    = 00000000
  Dr2    = 00000000  Dr7    = 00000000
 Volume in drive G is PROGRAMMING
 Volume Serial Number is 0CE2-B2BE

 Directory of G:\bbb

12.11.2004  06:21             3я321 v.Asm
12.11.2004  06:22               196 v.bat
12.11.2004  06:24           524я288 v.exe
12.11.2004  06:24           262я144 v.ilk
12.11.2004  06:24           225я416 v.obj
12.11.2004  06:24            25я600 v.pdb
12.11.2004  06:24                 0 v.txt
               7 File(s)      1я040я965 bytes
               0 Dir(s)     940я180я992 bytes free


:(

Провел дополнительные эксперименты, и получил следующее:
1. Линк с дополнительным ключом /debugtype:coff - работает, но количество отладочной информации, мягко говоря, уменьшается.

2. Линк
5,O,$B\LINK.EXE $3 /SUBSYSTEM:WINDOWS /DEBUG /VERSION:4.0 /LIBPATH:"$L" /OUT:"$5" /DEBUGTYPE:BOTH /PDB:NONE

(выдрал из конфигурации RadASMa)
работает, отладочная информация в порядке, но линкер выдает
LINK : warning LNK4027: CVPACK error


Хотя, можно сказать, что проблема и решена, все-таки хочется узнать, с чем я столкнулся.


Дата: Ноя 12, 2004 11:16:23 · Поправил: q_q

NCRangeR
Попробовал с ml.exe v6.14.8444, но линковал link.exe /DEBUG /subsystem:windows v.obj получил "твои" ошибки. Значит проблема в ml.exe

2. Линк ... работает ... но линкер выдает ...
Сделай CVPACK.EXE видимым через %PATH% и предупреждение пропадет.


Дата: Ноя 12, 2004 14:30:03

„(выдрал из конфигурации RadASMa) “

Тут уже несколько раз проскакивала
информация о неправильном поведении Link-ера
Последнее сообщение было как раз
про немалую роль RadAsm. Иногда
он формирует строки с неправильным
синтаксисом, а у тебя видимо "навел" твою ошибку.
Во всех случаях участвуют двойные кавычки.
Сам RadAsm не использую, поэтому больше
ничего не могу сказать.


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