Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2007, 23:34   #1
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию DLL и DRKB

здравствуйте!!
в DRKB есть статья
Системные функции и WInApi-Windows-DLL-аналог DumpBin
я всё переписал
захожу в командную строку и ввожу что написано и у меня выдаёт сообщение о ошибке
в части
ImageBase := GetModuleHandle(PChar(cmdline));
if (ImageBase = 0) thenbegin
MessageBox(0, 'Error Load ModuleQ', 'Error', MB_OK);
halt(0);
end;
помогите!!!
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 08.09.2007, 00:45   #2
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Выложи код полностью че ты там написал
Ring0Sn вне форума Ответить с цитированием
Старый 08.09.2007, 08:03   #3
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

program ExpDump;

uses windows;

var
ImageBase : DWord;
DosHeader : PImageDosHeader;
PeHeader : PImageNtHeaders;
PExport : PImageExportDirectory;
pname : PDWord;
name : PChar;
i : Integer;
cmdline : string;
function Dump(const log: PChar): boolean;
Var hFile : THandle;
dwError : DWord;
dwWritten : DWord;
buffer : PChar;
begin
hFile := CreateFile(PChar(cmdline + '_fexport.txt'), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);


dwError := SetFilePointer(hFile, 0, nil, FILE_END);

buffer := PChar(log + #13#10);
WriteFile(hFile, buffer^, length(buffer), dwWritten, nil);



end;

begin
if (ParamCount < 1) then halt(0) else cmdline := ParamStr(1);

ImageBase := GetModuleHandle(PChar(cmdline));

DosHeader := PImageDosHeader(ImageBase);


PEHeader := PImageNtHeaders(DWord(ImageBase) + DWord(DosHeader^._lfanew));


PExport := PImageExportDirectory(ImageBase + DWord(PEHeader^.OptionalHeader.Data Directory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress));
pname := PDWord(ImageBase + DWord(PExport^.AddressOfNames));


Dump(PChar('Programm ExpDump =)'));
Dump(PChar(cmdline + ' functions:'));
Dump(PChar(#13#10));

For i := 0to PExport^.NumberOfNames - 1dobegin
name := PChar(PDWord(DWord(ImageBase) + PDword(pname)^));
if (not Dump(name)) then halt(0);
inc(pname);
end;
end.
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 11.09.2007, 06:54   #4
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Заметь что у тебя функиця Dump(const log: PChar): boolean; невозвращает результата а здесь
Код:
if (not Dump(name)) then halt(0);
на её результат ссылаешься + хэндлы незакрываешь ))
Попробуй так:
Код:
program PeDump;
{$APPTYPE CONSOLE}
uses
  windows;

var
  ImageBase : DWord;
  DosHeader : PImageDosHeader;
  PeHeader : PImageNtHeaders;
  PExport : PImageExportDirectory;
  pname : PDWord;
  name : PChar;
  i : Integer;
  cmdline : string;

  function Dump(const log: PChar): boolean;
  Var hFile : THandle;
      dwError : DWord;
      dwWritten : DWord;
      buffer : PChar;
  begin
    Result:= false;
    hFile := CreateFile(PChar(cmdline + '_fexport.txt'), GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    dwError := SetFilePointer(hFile, 0, nil, FILE_END);
    buffer := PChar(log + #13#10);
    if (hFile > 0) or (dwError = 0) then
      if WriteFile(hFile, buffer^, length(buffer), dwWritten, nil) then
        Result:= true;
    CloseHandle(hFile);
  end;

  begin
    if paramcount < 1 then halt(0) else cmdline := ParamStr(1);

    ImageBase := GetModuleHandle(PChar(cmdline));
    DosHeader := PImageDosHeader(ImageBase);
    PEHeader := PImageNtHeaders(DWord(ImageBase) + DWord(DosHeader^._lfanew));
    PExport := PImageExportDirectory(ImageBase + DWord(PEHeader^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress));
    pname := PDWord(ImageBase + DWord(PExport^.AddressOfNames));

    Dump(PChar('Programm ExpDump =)'));
    Dump(PChar(cmdline + ' functions:'));
    Dump(PChar(#13#10));

    For i := 0 to PExport^.NumberOfNames - 1 do
    begin
      name := PChar(PDWord(DWord(ImageBase) + PDword(pname)^));
      if (not Dump(name)) then Halt(0);
      inc(pname);
    end;
  end.

Последний раз редактировалось Ring0Sn; 11.09.2007 в 06:58.
Ring0Sn вне форума Ответить с цитированием
Старый 11.09.2007, 06:54   #5
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Прикрепил полностью исходник подправленный:
Вложения
Тип файла: rar PeDump.rar (4.3 Кб, 19 просмотров)
Ring0Sn вне форума Ответить с цитированием
Старый 11.09.2007, 15:45   #6
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

все равно не работает захожу в командную строку ввожу имя ехе а потом DLL
и пишет ошибку и ничего в файл не записывается
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 11.09.2007, 18:51   #7
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

код твой для всех рабоать и несобирался изначально ! для user32.dll, kernel32.dll, .. работать должен

Последний раз редактировалось Ring0Sn; 11.09.2007 в 18:56.
Ring0Sn вне форума Ответить с цитированием
Старый 11.09.2007, 19:01   #8
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Смотри что пишут
Цитата:
Эта таблица содержит необязательные (по мнению Microsoft, ничего себе ;-) имена экспортируемых функций. Данный массив используется для совместно с Name Table Pointers и Ordinal Table для обеспечения связывания загрузчиком импорта/экспорта по имени. Механизм описывался выше. Каждый элемент являет собой ASCIZ строку с именем экспортируемой функции. Никто не говорит, что они должны в файле идти друг за другом последовательно, хотя так и построено большинство файлов. Надо отметить, что имена экспорта чувствительны к регистру.
Отметим особенность загрузчика - при связывании, если адрес функции находится в секции экспорта, то на самом деле по указанному адресу лежит строка переадресующая к другой библиотеке экспортирующей данную функцию (с указанием библиотеки и самой функции), это называется передача экспорта (если верить Мэту Питреку, я данную фичу еще не проверял).
Если интересно то рой в сторону ФОРМАТ ИСПОЛНЯЕМЫХ ФАЙЛОВ PortableExecutables (PE)
Ring0Sn вне форума Ответить с цитированием
Старый 11.09.2007, 19:23   #9
vitalik007
Дельфист
Форумчанин
 
Аватар для vitalik007
 
Регистрация: 14.08.2007
Сообщений: 317
По умолчанию

Цитата:
Сообщение от Ring0Sn Посмотреть сообщение
код твой для всех рабоать и несобирался изначально ! для user32.dll, kernel32.dll, .. работать должен
ну не знаю у меня не работает проверь у себя
ICQ-465033557
WINDOWS CE THE BEST
vitalik007 вне форума Ответить с цитированием
Старый 11.09.2007, 20:42   #10
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Я бы нестал говорить тебе что БУДЕТ РАБОТАТЬ непроверив у себя ))
Думаю с путями что то нето делаешь
пробуй тошто ниже тогда
Распакуй просто архив и запусти батник
Вложения
Тип файла: rar l_Export.rar (8.3 Кб, 24 просмотров)
Ring0Sn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц