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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2011, 10:51   #11
Silver_S
Форумчанин
 
Регистрация: 14.03.2011
Сообщений: 104
По умолчанию

Относительно варианта в первом посте
Код:
fs.ReadBuffer(@Buffer,1000); //читаю 1000 знаков
@ тут не нужна, такой вариант у меня даже не скомпилировался

Далее в функции Pos массив Buffer преобразуется к строке, где признаком конца строки является символ #0, т. е. массив будет обрезан до первого #0 (которых в исполняемом выше крыши).
Лучше сделать примерно так
Код:
SetString(s, Buffer, 1000);
if pos('ASDX', s) <> 0 then
PS
Массив объявить так
Код:
  Buffer: array[0..999] of AnsiChar;
PPS
И не следует забывать, что 'ASDX' может оказаться на границе 2 считываемых кусков.

Последний раз редактировалось Silver_S; 08.10.2011 в 11:10.
Silver_S вне форума Ответить с цитированием
Старый 08.10.2011, 11:54   #12
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Тоже вариант...
Но я поступил проще=) Получил список секций exe.
Человек_Борща вне форума Ответить с цитированием
Старый 08.10.2011, 18:50   #13
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
chertovich, ваш способ действительно работает...

но результат пичален:
На файл размером 10 кб тратиться 50 ms
На файл 1 мб затрачивается 5 секунд или 5247 ms

Следовательно на файл размером, скажем 10 мб, будет затрачено 50 секунд.

Можно ли быстрее?

вообще у меня задача:
Открыть exe, считать 1100 байт, перевести их в строку и там найти версию упаковщика(при помощи рерулярного выражения).
Для этого, как я уже говорил, необходимо использовать буфер по больше и считывать данные из файла туда. Осталось написать алгоритм, если сами не сможете то скажите, помогу.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 08.10.2011, 20:06   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Стоит 2 задачи:
1. Узнать упакован ли файл упаковщиком UPX
2. Получить версию уппаковщика из exe

С первой задачей я справился путём получения списка секций exe, и нахождением там текста UPX.

А вторую вот так:
Код:
function GiveUPXVersion(aFileName: string): string;
var
  fs: TFileStream;
  Buff: array [1 .. 1008] of AnsiChar;
  VerBuff: array [1 .. 4] of AnsiChar;
  pStr: Integer;
  UpxVer: string;
  s: String;
begin
  fs := TFileStream.Create(aFileName, fmOpenRead);
  try
    fs.Position := 0;
    fs.Seek(0, soFromBeginning);
    fs.ReadBuffer(Buff, 1007);
    SetString(s, PAnsiChar(@Buff), SizeOf(Buff));
    if Pos('UPX!', s) <> 0 then
    begin
      pStr := (Pos('UPX!', s) - 1);
      fs.Seek((pStr - 5), soFromBeginning);
      fs.ReadBuffer(VerBuff, 4);
      SetString(UpxVer, PAnsiChar(@VerBuff), SizeOf(VerBuff));
      Result := UpxVer;
    end;
    fs.Position := 0;
  finally
    FreeAndNil(fs);
  end;
end;
Silver_S и chertovich Благодарю=)
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
квадраты вместо текста i-ula Microsoft Office Word 1 06.06.2011 19:18
мемо. вместо текста цифры maloun C++ Builder 5 02.02.2011 17:51
Как вставить кусок текста в текст Tomatos Общие вопросы Delphi 5 24.09.2009 21:00
получить кусок из адреса memka PHP 3 08.04.2009 12:52
ссылка вместо текста!!! Abbatik Помощь студентам 7 09.02.2008 13:29