eXeL@B —› Основной форум —› TlsIndex в win xp |
Посл.ответ | Сообщение |
|
Создано: 09 сентября 2018 00:13 · Личное сообщение · #1 Отлаживаю либу, которая написана на c++. В ней такой код Code:
Когда отлаживаю на win7, то все нормально работает, инструкция Code:
Почему так на хп работает и как пофиксить, чтобы там эту либу можно было также как в вин7 дебажить ? |
|
Создано: 09 сентября 2018 00:15 · Поправил: Kindly · Личное сообщение · #2 |
|
Создано: 09 сентября 2018 00:28 · Поправил: f13nd · Личное сообщение · #3 Это что-то из разряда получить хендл kernel32 из шеллкода - безобидные легитимные программы такого делать не должны. Напрямую лазить в peb и teb только виндовые библиотеки имеют моральное право, да при установке seh разве что. Так что эту поделку тебе надо заменить на TlsGetValue/TlsSetValue. ----- 2 оттенка серого |
|
Создано: 09 сентября 2018 00:28 · Личное сообщение · #4 Kindly, да это понятно, вопрос в том, почему в хп в TlsIndex ничего не передается и как это пофиксить можно, на хп дебажить приятнее. Добавлено спустя 11 минут f13nd пишет: Так что эту поделку тебе надо заменить на TlsGetValue/TlsSetValue. Да она много где в коде встречается, много правок, на прямую как в семерке на хп не прокатит ? |
|
Создано: 09 сентября 2018 00:45 · Личное сообщение · #5 mazaxaker пишет: Да она много где в коде встречается, много правок, на прямую как в семерке на хп не прокатит ? Ну видимо нет. Ну или проблема не в выборке, а в создании ThreadLocalStorage, которого не происходит почему-то. Сделано бы было по канонам, работало бы везде одинаково. ----- 2 оттенка серого |
|
Создано: 09 сентября 2018 02:01 · Поправил: ClockMan · Личное сообщение · #6 f13nd пишет: Это что-то из разряда получить хендл kernel32 из шеллкода - безобидные легитимные программы такого делать не должны Это ты программам на делфи написанных скажи там это функция вовсю юзается, пусть лучше смотрит в сторону TLS directory ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 09 сентября 2018 08:43 · Поправил: f13nd · Личное сообщение · #7 ClockMan пишет: Это ты программам на делфи написанных скажи У меня еще не настолько шифер посыпался, чтобы с программами разговаривать. Но однажды дельфи мутирует настолько, что эти многометровые чудища осознают себя личностями и сами начнут разговаривать. В 8.1 х64 TlsSetValue Code:
Как бы немножечко не то пальто, да еще с таким смещением. Лучше бросить это значение ----- 2 оттенка серого |
|
Создано: 09 сентября 2018 09:39 · Личное сообщение · #8 |
|
Создано: 09 сентября 2018 11:34 · Личное сообщение · #9 mazaxaker нет On Windows operating systems before Windows Vista, __declspec( thread ) has some limitations. If a DLL declares any data or object as __declspec( thread ), it can cause a protection fault if dynamically loaded. After the DLL is loaded with LoadLibrary, it causes system failure whenever the code references the __declspec( thread ) data. Because the global variable space for a thread is allocated at run time, the size of this space is based on a calculation of the requirements of the application plus the requirements of all the DLLs that are statically linked. When you use LoadLibrary, you cannot extend this space to allow for the thread local variables declared with __declspec( thread ). Use the TLS APIs, such as TlsAlloc, in your DLL to allocate TLS if the DLL might be loaded with LoadLibrary. ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 09 сентября 2018 16:43 · Поправил: difexacaw · Личное сообщение · #10 Что то тут не сходится, работать оно должно наоборот. На 7-ке +0x2C: UserSharedInfo. На XP там тлс. ТС попутал и вводит всех в заблуждение. mazaxaker > на хп есть способ, чтобы инструкция И даже не один по подмене выборки(DF). В простейшем случае ставите железячный останов на это поле и обрабатываете его, эмулируя инструкцию, либо перезапуском её с изменённым контекстом. Ну чтобы подменять смещения динамически, не трогая дельфийский код, в котором нет OS-case. ----- vx |
|
Создано: 10 сентября 2018 01:24 · Поправил: ClockMan · Личное сообщение · #11 |
|
Создано: 12 сентября 2018 21:40 · Поправил: difexacaw · Личное сообщение · #12 ClockMan А как оно могло работать на старших версиях системы, если там другие смещения ? И не имеет значения длл или нет, поле в системной структуре не соответствует версиям. Удивительно почему никто это не посмотрел. Кстате между делом, кровь из глаз пойдёт если смотреть: > mov ecx, large fs:2Ch Это косяк компилера - нет адресных скобок, эффективный адрес не определён, значит это загрузка константы в регистр и наличие префикса FS. ----- vx |
|
Создано: 13 сентября 2018 00:52 · Личное сообщение · #13 |
|
Создано: 13 сентября 2018 20:55 · Поправил: difexacaw · Личное сообщение · #14 |
eXeL@B —› Основной форум —› TlsIndex в win xp |