Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Старый 05.06.2016, 09:45   #1
 Старший сержант
Аватар для крайслер
 
крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(крайслер сломал счётчик популярности :(
Регистрация: 04.02.2011
Сообщений: 198
Популярность: 12244
Сказал(а) спасибо: 453
Поблагодарили 435 раз(а) в 242 сообщениях
Отправить сообщение для крайслер с помощью Skype™
 
По умолчанию OppCode Info

Пример получения "длинны" инструкции и собственно самой инструкции по указанному адресу.
Использовался "Length Disassembly Engine"(LDE). Гуглим, собираем Lib под свой набор инструментов, либо качаем старый билд([Ссылки могут видеть только зарегистрированные пользователи. ]) и отключаем "Образ безопасных исключений" ( "/SAFESEH:NO").

подключаем LDE к проекту:
Код:
#ifdef _M_IX86
	#pragma comment(lib, "LDE64")
	extern "C" size_t __stdcall LDE(const LPVOID lpData, unsigned int size);
#else
	#pragma comment(lib, "LDE64x64")
	extern "C" size_t __fastcall LDE(const LPVOID lpData, unsigned int size);
#endif
Заводим структуру данных:
Код:
struct _STRUCTINFO
{
	struct _INFO
	{
		uint64_t		          dwAdress;
		size_t                    sSize;
		std::vector<UCHAR>	      pBYTE;
	}INFO;
	std::vector<_INFO> vDataInfo;
};
Описываем функцию:
Код:
_STRUCTINFO GetInformation(uint64_t dwAddress)
{
	_STRUCTINFO vOut;
	for (UCHAR* uBase = (UCHAR*)dwAddress;;)
	{
		if (uBase[0] == 0xCC)
			break;

		size_t Size = LDE(uBase, 64);

		if (Size == -1 ||
			Size == 0)
			break;

		vOut.INFO.sSize = Size;
		vOut.INFO.dwAdress = (uint64_t)uBase;

		for (size_t i = 0; i < Size; i++)
			vOut.INFO.pBYTE.push_back(uBase[i]);

		vOut.vDataInfo.push_back(vOut.INFO);

		if (uBase[0] == 0xC3 ||
			uBase[0] == 0xC2 ||
			uBase[0] == 0xE9)
			break;

		uBase += Size;
	}
	return vOut;
}
Применяем:
Код:
	_STRUCTINFO pGetOp = GetInformation(Адресс_участка);
	const int   Len    = pGetOp.vDataInfo.front().sSize;
	Log("  Adress::   0x%I64X\n", pGetOp.vDataInfo.front().dwAdress);
	Log("  Length::   %d\n", Len);
        Log("  Function:: ");
	for (size_t i = 0; i < Len; i++)
			Log("\\x%02X", pGetOp.vDataInfo.front().pBYTE[i]);
[Ссылки могут видеть только зарегистрированные пользователи. ]

проверял в Interal, но тут не составит труда дописать пару строк для чтения памяти из внешнего источника)


ЗЫ: Все это конечно можно и по другому организовать(длину инструкции имею ввиду), но это пока самый мало емкий вариант)))
________________

-Отложи на послезавтра то что можешь сделать сегодня, и тогда у тебя появятся два свободных дня!
  Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Информация] Hud Info v1.2 maxximan Counter-Strike 1 24.05.2014 13:20
[Продам] Origin Brute/Checker info+Battlelog Parser/Checker info от Легиона alt3R1 Steam, Origin, Uplay и другие системы 0 13.11.2012 17:14
PSP Info v0.1 jora1885 Софт 0 05.06.2011 12:47

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 06:19.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net