· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.RESEARCH —› Определить формат строк..

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


Дата: Ноя 3, 2003 04:30:43

Подскажите, please, что это за формат строк и где взять его
описание, да, забыл сказать, это дельфи.
Или объясните вкратце структуру, зачем впереди FFFFFFFF, потом
длина строки??
0046BF4B     00             DB 00
0046BF4C   . FFFFFFFF       DD FFFFFFFF
0046BF50   . 07000000       DD 00000007
0046BF54   . 72 75 73 73 69>ASCII "russian",0
0046BF5C   . FFFFFFFF       DD FFFFFFFF
0046BF60   . 0F000000       DD 0000000F
0046BF64   . 52 65 67 69 73>ASCII "Registered by: ",0


Дата: Ноя 3, 2003 10:01:32

Насколько я понимаю, это обычный формат строк Паскаля: один байт - длина строки, сама строка и 0. И в IDA есть такая опция. А -1 может, вообще не к строке относится?


Дата: Ноя 3, 2003 10:06:32

это таблица данных DELPHI (array)


Дата: Ноя 3, 2003 13:09:06

А по точнее можно, потому что мне нужно такую же строку изобразить
но в другом месте программы, попробовал обычную оканчивающуюся нулём-
глюканула, потом понял что что-то здесь не так.


Дата: Ноя 3, 2003 15:49:42

Asterix
-1 это похоже счетчик количества ссылок на строку. При удалении строки счетчик увеличивается. И когда станет равен нулю, память занимаемая строкой освобождается. При передаче строки в функцию или присваивании переменной уменьшается. Копия строки создается только если строка будет модифицированна.
Следующие 4 байта занимает длина строки. Обращение к счетчику ссылок через [ps-8], к длине строки [ps-4]. ps - указатель на строку. Если передаешь строку в какую нибудь функцию, не забудь уменьшить счетчик, так как перед выходом функция попытается ее удалить.


Дата: Ноя 3, 2003 16:13:49

Ой блин я запутался ;-),
мне нужно дописать свою строку в программу, но здесь в приведённом
куске места нет, я хотел в конце секции, вопрос в том что я должен записать
полностью конструкцию вида:
0046BF4C   . FFFFFFFF       DD FFFFFFFF
0046BF50   . 07000000       DD 00000007
0046BF54   . 72 75 73 73 69>ASCII "russian",0


или нет??


Дата: Ноя 3, 2003 16:41:51

Вот для наглядности, как вызываются эти строки в программе:
0046BCFB   . B8 54BF4600    MOV EAX,file.0046BF54                ;  ASCII "russian"
0046BD00   . E8 E780F9FF    CALL file.00403DEC
0046BD05   . 85C0           TEST EAX,EAX
...................................................................... 
...................................................................... 
0046BD76   . BA 64BF4600    MOV EDX,file.0046BF64                ;  ASCII "Registered by: "
0046BD7B   . E8 2C7EF9FF    CALL file.00403BAC
...................................................................... 
...................................................................... 
0046BF4B     00             DB 00
0046BF4C   . FFFFFFFF       DD FFFFFFFF
0046BF50   . 07000000       DD 00000007
0046BF54   . 72 75 73 73 69>ASCII "russian",0
0046BF5C   . FFFFFFFF       DD FFFFFFFF
0046BF60   . 0F000000       DD 0000000F
0046BF64   . 52 65 67 69 73>ASCII "Registered by: ",0
0046BF74     FF             DB FF
0046BF75     FF             DB FF


Дата: Ноя 3, 2003 16:47:28

Да. В функцию в качестве строки нужно передавать 46BF54h. Если ты передаешь ее из своего кода, то перед этим уменьшив dword по адресу 46BF4Ch. Иначе функция перед выходом попытается освободить память, которую занимает строка. Память которую занимает строка должна быть доступна для записи.


Дата: Ноя 3, 2003 18:11:40 · Поправил: Asterix

Black_mirror

Значит как я понял, чтобы мне в программе заменить слово "russian" на своё
я могу в конце секции написать:
             . FFFFFFFF       DD FFFFFFFF
             . 07000000       DD 00000009
my_address   . 72 75 73 73 69>ASCII "all users",0


И затем передать этот адрес в функцию:
0046BCFB   . B8 54BF4600    MOV EAX,file.my_address
0046BD00   . E8 E780F9FF    CALL file.00403DEC
0046BD05   . 85C0           TEST EAX,EAX


Больше мне ничего не нужно, а уменьшать DWORD будет уже родная
прога, если это в ней предусмотрено, так?


Дата: Ноя 3, 2003 18:39:42

Asterix
Вроде должно работать.


Дата: Ноя 3, 2003 19:05:21

Ладно, буду проверять ;-)


Дата: Ноя 3, 2003 20:06:06

Black_mirror

Спасибо, всё работает :-)


Дата: Ноя 3, 2003 21:38:31

Более того, оказалось что если впереди добавить два нулевых
байта то это считается как выравнивание на dword.


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