Всем привет. Сабж, интересует ручной метод, т.е. написать что-то вроде аналога LoadString. Помедитировал на exe'шник через HEX редактор, поводил глазами в ResHack, так понял, что кроме самих строк, где-то надо достать их размер, чтобы впоследствии удачно вытащить. (Еще заметил, что каждая запись отделяется от предыдущей 3-мя байтами, чаще что-то вроде 00h 17h 00h, редко второй байт выше 31, но это так, не думаю, что это важно, просто не имею опыта Получается каждая строка имеет свой десятичный идентификатор, как понимаю его-то и надо использовать... Подскажите что-нибудь, пожалуйста.
Обычно строки оканчиваются либо нулем, либо в конце длинна строки. Раньше еще знаком бакса терминировались. А сами строки где? В ресурсах или в секции данных? Или еще где?
В ресурсах. Тут после каждого символа идет 0 Код (Text): B:D910h: 6B 00 62 00 2F 00 73 00 65 00 63 00 1C 00 52 00 k.b./.s.e.c...R. B:D920h: 65 00 67 00 69 00 73 00 74 00 65 00 72 00 42 00 e.g.i.s.t.e.r.B. B:D930h: 69 00 6E 00 64 00 53 00 74 00 61 00 74 00 75 00 i.n.d.S.t.a.t.u. B:D940h: 73 00 43 00 61 00 6C 00 6C 00 62 00 61 00 63 00 s.C.a.l.l.b.a.c. B:D950h: 6B 00 3A 00 20 00 19 00 52 00 65 00 67 00 69 00 k.:. ...R.e.g.i. B:D960h: 73 00 74 00 65 00 72 00 69 00 6E 00 67 00 20 00 s.t.e.r.i.n.g. . B:D970h: 6E 00 65 00 77 00 20 00 6D 00 6F 00 6E 00 69 00 n.e.w. .m.o.n.i. B:D980h: 6B 00 65 00 72 00 3A 00 20 00 1A 00 k.e.r.:. ... Первый ресурс: "kb/sec" Второй: "RegisterBindStatusCallback: " между ними 00 1C 00 и т.д. В редакторе ресурсов это выглядит так: Код (Text): STRINGTABLE LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL { 65264, "kb/sec" 65265, "RegisterBindStatusCallback: " 65266, "Registering new moniker: " 65267, "RevokeBindStatusCallback: " }
Я так понимаю эти "нули" после символов зарезервированы на случай использования unicode? Тогда из моего примера 1Ch будет являться длиной строки "RegisterBindStatusCallback: ". Точно.
Как бы теперь найти в общей массе данных найти блок STRINGTABLE, в каждом отдельном exe можно найти сигнатуры на поиска начала и конца, но вот никакой универсальности не получается.