![]() |
eXeL@B —› Вопросы новичков —› Иследование длл на мультипотоковость. (Multithread) |
Посл.ответ | Сообщение |
|
Создано: 23 ноября 2007 22:51 · Личное сообщение · #1 Здрасьте Всем!! Хочу сразу сказать, что я только пару дней назад нашел этот сайт (да и начал изучать эту область). И хочу выразить огромную благодарность создателям и админам этого сайта! Сайт суперский, огромное количество полезной информации, качалка, все что нужно для счастья вообщем. Большое спасибо!!! Перейду ближе к делу! Есть программа в которую нужно встроить определенный код, и вообще всячески исследовать. Какие процедуры за что отвечают и тд. Самое простое было бы добавить библиотеку и в в процедуре main (или как там она называется) библиотеки создать новый поток, который бы работал постоянно, и использовал внешнии библиотеки приложения. Впринципе этого было бы наверно достаточно. Внимание Вопрос: После создания нового процесса, программа становится мультипотоковой (возможно в приложении и так больше одного потока, я не смотрел пока). Поэтому библиотеки должны быть так же мультипотоковыми, чтобы не было ошибки при вызове из двух потоков одной процедуры одновременно. Вопрос как узнать, multithread dll или singlethread? и есть ли какие нибудь инструменты чтобы сделать из singlethread - multithread? Заранее спасибо за ответ! ![]() |
|
Создано: 23 ноября 2007 23:24 · Личное сообщение · #2 shob_vas пишет: Есть программа в которую нужно встроить определенный код, и вообще всячески исследовать. Какие процедуры за что отвечают и тд. Это называется реверсинг. shob_vas пишет: в процедуре main (или как там она называется) Название - это только слово. А суть - EntryPoint. shob_vas пишет: После создания нового процесса Ты хотел сказать нити (треда)? shob_vas пишет: Вопрос как узнать, multithread dll или singlethread Можно посмотреть есть ли в списке вызываемых Win32API функции работы с тредами (типа CreateThread). Если жертва не пакована, то сразу смотри импорт (в Hiew'e F4,F8,F7). shob_vas пишет: и есть ли какие нибудь инструменты чтобы сделать из singlethread - multithread? Вот этот вопрос вообще не понял. Ты знаком с WinAPI-программированием? Если нет - увы =(. ----- Всем привет, я вернулся ![]() |
|
Создано: 23 ноября 2007 23:59 · Личное сообщение · #3 Bitfry Спасибо за исчерпывающий ответ! Bitfry пишет: Можно посмотреть есть ли в списке вызываемых Win32API функции работы с тредами (типа CreateThread). Если жертва не пакована, то сразу смотри импорт (в Hiew'e F4,F8,F7). Буду иметь ввиду, спасибо, обязательно посмотрю! Хотя я щас подумал, возможно вы не много не так поняли вопрос... Когда я создаю библиотеку (или екзешник) в VS в свойствах проекта, можно указать в графе "runtime library" на выбор multithread или singlethread. (Я конечно может что то неправильно понимаю, но я себе это представляю как генерация кода для мультитредового приложения либо сингтредового) Я вообще себе это правильно понимаю или нет? ![]() |
|
Создано: 24 ноября 2007 02:03 · Личное сообщение · #4 Так бы сразу и сказал, что про VS спрашиваешь. Различий между multithread и singlethread в бинарнике не будет до тех пор пока не появится код второй нити и, если не ошибаюсь, без опции multithread этот код не скомпилить. Так что смотри импорт. А для более глубокого понимания вопроса спускайся на уровень Ассемблера и чистого WinAPI. ----- Всем привет, я вернулся ![]() |
|
Создано: 24 ноября 2007 10:39 · Личное сообщение · #5 |
|
Создано: 24 ноября 2007 21:23 · Личное сообщение · #6 shob_vas пишет: может это делает какой нибудь peid или чтонибудь типа того... Ещё раз повторю. Чтоб было понятно. PeId всего лишь сопоставляет файл со своей базой сигнатур. Если ты добавишь в базу свою сигнатуру Multithread (там элементарный текстовый формат), то будет и PeId определять эту самую опцию. Проблема заключается в том, что exe собраные multithread и singlethread абсолютно одинаковые. Можешь провести эксперимент: 1. Скомпилить шаблон окна в VS с разными опциями. 2. Сравнить по байтам FC /b 3. Проанализировать отличия. Увидишь, что кроме билда и тайма файлы одинаковые. Но если в коде будет второй тред (хотябы оконная процедура второй нити) - различия будут. А самое яркое из них всё равно функция CreateThread в импорте. =) ----- Всем привет, я вернулся ![]() |
|
Создано: 25 ноября 2007 09:57 · Личное сообщение · #7 |
|
Создано: 26 ноября 2007 11:57 · Личное сообщение · #8 |
|
Создано: 26 ноября 2007 20:21 · Личное сообщение · #9 |
|
Создано: 26 ноября 2007 20:47 · Поправил: shob_vas · Личное сообщение · #10 |
|
Создано: 26 ноября 2007 21:03 · Личное сообщение · #11 shob_vas Не разные процессы, а один. В разных процессах свое адрессное пространство, и им глубоко похер, что какой-то еще процесс юзает эту дллку. А вот в одном - если какой-то из потоков использует глобальную переменную, то при обращении к ней разных потоков должна быть поминимуму синхронизация, а по максимуму от нее вообще желательно избавиться. При компиляции в мультитрединг компилятор где можно, заменяет переменные на локальные.Это вообще кассательно библиотечных функций. За своими лучше следить самому. ----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... ![]() |
|
Создано: 26 ноября 2007 22:01 · Личное сообщение · #12 |
|
Создано: 26 ноября 2007 23:35 · Личное сообщение · #13 s0larian пишет: Bitfry, кста, в старых VC++ были две версии снандартных библиотек: single and multi threaded. Думаю что первая это просто оптимизация второй без синхронизации. Так енто, в принципе можно сделать сигнатуру malloc или new - реализации будут разные. Понял. Нужно не шаблон компилить, а пример с malloc, тогда различия появятся. Но вообще странно, что этих сигнатур до сих пор нет в PeId. =/ shob_vas пишет: То есть по идее если екзешник скомпилен на vs2005, то можно подсоединять новые ПОТОКИ к нему и использовать функции его библиотек (dll) не боясь, ошибок из-за одновременного вызова функции разными ПОТОКАМИ, так? 100% гарантии нет. Но если dll писал не Бил лично, то должно работать. Очень советую прочитать: Джеффри РИХТЕР Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows shob_vas пишет: черт, я имел ввиду потоки а не процессы! Строго говоря, thread лучше переводить как "нить" или тупо "тред". А то встречал я такие переводы, в которых одним словом и stream и pipe и thread... Пойди разберись. ----- Всем привет, я вернулся ![]() |
|
Создано: 27 ноября 2007 04:41 · Поправил: s0larian · Личное сообщение · #14 Bitfry, кста ешё один момент - CRT(С Runtime Libs) может линковаться динамически. Вообще, было три варианта: single-threaded static <ML[d]>, multithreaded static <MT[d]>, or multithreaded DLL<MD[d]> В VS2005 осталисть два воследних. http://support.microsoft.com/kb/154753 http://support.microsoft.com/kb/154753 ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Иследование длл на мультипотоковость. (Multithread) |