![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Аналог db '0' dup(2000) [D7]
Виктор1111 © (2006-10-20 15:41:00)Как сделать сабж на дельфи?, т.е. чтобы в исполняемом файле после компиляции ьыла последовательность из 2000 '0'?
90210 (2006-10-20 22:12:00) [1]Я конечно полный лох, но может тебе копат в этом направлении
begin
asm
jmp @_end
db 'delphimaster.ru' // маркер
db 0, 0, 0 ,0, 0, 0, 0, 0 // .... ересь
@_end:
end;
ShowMessage('iam here!');
Подобные вопросы можно найти а Анти Крековые Мучения, или в подобных статьях.
Ketmar (2006-10-20 17:36:00) [2]>[11] Виктор1111 20-Oct-2006, 16:18
>нет, это все не подходит. Скрипт на сайте перед выдачей
>исполняемого файла пользователю модифицирует его таким
>образом, чтобы можно было потом по копии файла узнать кому
>он принадлежит.
а не пробовал файлы лицензий использовать для этой цели? ну зачем всё делать через задний проход, а?
Виктор1111 (2006-10-20 17:24:00) [3]> Johnmen © (20.10.06 17:03) [22]
я говорил примерно а не в точных цифрах. На деле мне нужно 24008 байт...
> guav & Сергей М
В программу будет писать скрипт на PHP. В ПХП, на сколько мне известно, нет функций для модификации ресурсов PE файлов. Поэтому я вполне логично выбрал такой путь решения проблемы...
Johnmen (2006-10-20 17:03:00) [4]
> записать туда массив данных общим размером в 2 килобайта.
> последовательность из 2000 '0'
> some_identifier: array[0..51999] of Char = '55567';
:)))
guav (2006-10-20 16:57:00) [5]> [7] Виктор1111 (20.10.06 16:11)
const
A: array[0..2000-1] of AnsiChar = 'The Label';
initialization
ZeroMemory(@A, 0); // это ничего не делает,
// это чтоб линкер не выкинул
end.
метка 'The Label' и 1991 нулей после неё попадут в ехешник. но такие вещи правильно через ресурсы делать
Сергей М. (2006-10-20 16:53:00) [6]
> Виктор1111 (20.10.06 16:47) [18]
Мы легких (документированных !) путей не ищем ?
Нам надо через решение ж. ?)
Есть же ресурсы PE-модуля !
Для работы с ними у MS есть всечто надо: и поиск по идентификатору, и чтение, и запись одним вмахом "волшебной палочки" ..
См. [19]
Сергей М. (2006-10-20 16:50:00) [7]
> Виктор1111 (20.10.06 16:18) [11]
На то есть BeginUpdateResource+UpdateResource+EndUpdateResoure.
Виктор1111 (2006-10-20 16:47:00) [8]> DrPass © (20.10.06 16:40) [17]
Да, нужно записать на это место жругой массив. И нулями заполненный массив не подходит, потому что я его найти не могу, поэтому хочелось бы чтобы он был характерный...
З.Ы. Все, вроде разобрался. Буду делать примерно так
uses Windows;
const
some_identifier: array[0..51999] of Char = '55567';
begin
MessageBoxA(0, some_identifier, '', 0);
end.
Т.е. массив нужны идентифицировать по строке 55567, а дальше со всеми sizeof(some_identifier) буду делать что захочу...
DrPass (2006-10-20 16:40:00) [9]
> Виктор1111 (20.10.06 16:26) [13]
Все глобальные переменные инициализируются нулями. Так что просто объяви массив. Непонятно только, зачем тебе это надо в исполняемом файле. Записать туда что-то сторонней программой?
Сергей М. (2006-10-20 16:35:00) [10]
> метка в исполняемом файле
В исп.файле нет никаких "меток".
Сергей М. (2006-10-20 16:33:00) [11]
> Аналог db '0' dup(2000)
В секции инициализированных данных ?
Запросто:
some_identifier: array[0..1999] fo Byte;
Сергей М. (2006-10-20 16:31:00) [12]
> Виктор1111 (20.10.06 16:26) [13]
В Д7 нет макрос-механизма.
Виктор1111 (2006-10-20 16:26:00) [13]Анатолий, и твой вариант не подходит. DupeString вызывается как процедура в уже скомпилированном варианте, мне же нужен аналог макропроцессора, чтобы он перед компиляцией модифицировал исходный код нужным образом.
Anatoly Podgoretsky (2006-10-20 16:18:00) [14]Не поверишь, но это тот же DupeString
Виктор1111 (2006-10-20 16:18:00) [15]нет, это все не подходит. Скрипт на сайте перед выдачей исполняемого файла пользователю модифицирует его таким образом, чтобы можно было потом по копии файла узнать кому он принадлежит.
MBo (2006-10-20 16:15:00) [16]Есть много методов межпроцессного обмена (IPC)
Memory-Mapped File, WM_COPYDATA, сокеты, пайпы и так далее..
Виктор1111 (2006-10-20 16:14:00) [17]В ресурсы засовывать не хочу т.к. большая часть кода уже написана таким образом
Ketmar (2006-10-20 16:13:00) [18]какие только извраты народ не придумывает, лишь бы не писать нормально...
Виктор1111 (2006-10-20 16:11:00) [19]нет, меня наверно не так поняли. Константа заполненная символами в самой программе мне не нужна. Мне нужна метка в исполняемом файле, чтобы другое приложении могло без проблем найти нужное место и записать туда массив данных общим размером в 2 килобайта... И нужно чтобы потом сама модифицированная программа могла получить доступ к записанным на место константы данным примерно таким образом...
copymemory(PChar(s10), @bts, sizeof(bts));
Ketmar (2006-10-20 16:09:00) [20]const, const... а линкер её всё равно выкинет. %-)