Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2009, 02:33   #1
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию Как такое может быть???

Код:
typedef struct jmp_far
{
  BYTE instr_push;  
  DWORD arg;         
  BYTE  instr_ret;
}JMP;
Видно что эта структура занимает 6 байт, но...

Код:
bool Inject2(const char * module,const char * funcname,DWORD ourFunc,DWORD & realFunc)
{
	DWORD op,written;
	realFunc = (DWORD)GetProcAddress(GetModuleHandle(module),funcname);
	if(realFunc == 0) return false;
	
	jump.instr_push = 0x68;
	jump.arg = ourFunc;
	jump.instr_ret = 0xC3;

	ReadProcessMemory(GetCurrentProcess(),(void*) realFunc, (void*)&old, 6, &written);
	WriteProcessMemory(GetCurrentProcess(), (void*)realFunc, (void*)&jump, sizeof(jump), &written);

 return true;
}
но оператор sizeof возвращает 12 байт. как это так ? причем, когдая просарел дамп после instr_push было 3 нулевых байта, так же как и после instr_ret. получаеться что они оба весили по 4 байта. что это такое? я из за этого спать не мог лечь, потому шо нихрена неработало. я перерыл весь интернет, думал это у меня кривые руки. яя злоййййй
lennon вне форума Ответить с цитированием
Старый 21.10.2009, 02:38   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Почитайте про оптимизацию и выравнивание данных.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 21.10.2009 в 02:40.
Goodwin98 вне форума Ответить с цитированием
Старый 21.10.2009, 02:43   #3
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

я убрал оптимизацию и оператор все равно возвращает 12 байт. У меня куча приложений так считают рамер структуры и все работает... а хотя щас проверю...
lennon вне форума Ответить с цитированием
Старый 21.10.2009, 02:50   #4
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

йОперный балет!!!! ДА ВЫ ПРАВЫ оО
Как же тогда посчитать размер структуры? ай яй яй. надо почитать. спасибо
lennon вне форума Ответить с цитированием
Старый 21.10.2009, 03:10   #5
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

Код:
#pragma pack(push,1)
typedef struct jmp{
	BYTE a;
	DWORD s;
	BYTE f;
};
#pragma pack(pop)
отменяет выравнивание
lennon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чудеса на виражах! Как такое может быть? Gypsy Общие вопросы Delphi 4 16.10.2009 18:06
Может быть так, что в мамку может попасть вирус и не загружать жесткий диск Berzhan Операционные системы общие вопросы 6 27.07.2009 21:40
Что такое может быть? vasek123 Свободное общение 3 14.04.2009 19:13
то такое мастерство в программировании, что такое мастер программист и что он может? Cezar Свободное общение 29 02.06.2007 23:48