Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели, как избавится от предупреждения 
:(
    Опции темы
tofreesky
Дата 9.6.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Код

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

DWORD *DLLAddr;
char* const fff[] = {"kernel32.dll"};

int main()
{
 DLLAddr = LoadLibraryA(fff[0]);
 return 0;
}


Предупреждение компилятора: 12: warning: assignment from incompatible pointer type

Понятно что вместо DWORD DLLAddr нужно писать HINSTANCE DLLAddr;
Т.к.  - WINBASEAPI HINSTANCE WINAPI LoadLibraryA(LPCSTR);

Но мне нужно потом считывать в DWORD переменные PEHeader библиотеки, указатель на экспорт etc

Хочу что бы без предупреждений компилировалось
PM MAIL   Вверх
586
Дата 9.6.2010, 20:31 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Код
// DWORD *DLLAddr;  // не правильно (или действительно так нужно?)
DWORD DLLAddr;
DLLAddr = (DWORD)LoadLibraryA(fff[0]);


Это сообщение отредактировал(а) 586 - 9.6.2010, 20:33
PM   Вверх
tofreesky
Дата 9.6.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



 DWORD PEHeaderOffset;
 PEHeaderOffset = *(PDWORD) &DLLAddr[0x3C];

А с этим тогда что делать?
PM MAIL   Вверх
586
Дата 9.6.2010, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



правильно вообщето так:
Код
IMAGE_DOS_HEADER *idh = (IMAGE_DOS_HEADER*)LoadLibraryA(fff[0]);
DWORD PEHeaderOffset = idh->e_lfanew;

PM   Вверх
tofreesky
Дата 9.6.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Мне без этих хитростей нужно сделать, просто есть DWORD с адресом библиотеки, а дальше я руками все вычислить хочу

Потому что DWORD PEHeaderOffset = idh->e_lfanew;
Не логично что e_lfanew это читает дворд по смещению 3С



Это сообщение отредактировал(а) tofreesky - 9.6.2010, 20:44
PM MAIL   Вверх
586
Дата 9.6.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Код
DWORD DLLAddr;
DLLAddr = (DWORD)LoadLibraryA(fff[0]);
DWORD PEHeaderOffset = *(DWORD*)(DLLAddr+0x3с);

PM   Вверх
tofreesky
Дата 9.6.2010, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



А как бы вы проще и легче реализовали задачу, на вход функции подается имя апи, из dll, адрес которой мы знаем, в ответ возвращается word - Hint апи 

ps

А в чем отличие:

byte *pointer;
pointer = malloc(0x1000);

и 

byte* pointer;
pointer = malloc(0x1000);

Т.е. положение символа "*" , компилировал и так и так, все одинаково, в чем разница?
PM MAIL   Вверх
586
Дата 9.6.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Цитата(tofreesky @  9.6.2010,  21:53 Найти цитируемый пост)
А как бы вы проще и легче реализовали задачу, на вход функции подается имя апи, из dll, адрес которой мы знаем, в ответ возвращается word - Hint апи 

Используя соответствующие структуры - IMAGE_DOS_HEADER, IMAGE_NT_HEADERS и другие.
Цитата(tofreesky @  9.6.2010,  21:53 Найти цитируемый пост)
Т.е. положение символа "*" , компилировал и так и так, все одинаково, в чем разница? 

без разницы
PM   Вверх
tofreesky
Дата 9.6.2010, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



 DWORD PEHeaderOffset,ExportTable;
 DWORD Pointer1;
 DWORD Pointer2;
 WORD Hint = 0;

 for(Hint=0;;Hint++)
 {
  Pointer2 = *(DWORD*)(Pointer1+Hint*4) + DLLAddr;
  if(strcmp(APIName,Pointer2) == 0) break;
 }

Теперь жалуется что Pointer2, должен выглядеть как char* Pointer2;

И как еще сделать, что бы читался DWORD в каждой итерации, без Hint*4, а то боюсь как бы переполнения не было

Это сообщение отредактировал(а) tofreesky - 9.6.2010, 21:18
PM MAIL   Вверх
tofreesky
Дата 10.6.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Так что делать?
PM MAIL   Вверх
mes
Дата 10.6.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(tofreesky @  10.6.2010,  11:19 Найти цитируемый пост)
Так что делать? 

почитать книжку на тему адресная арифметика. 



--------------------
PM MAIL WWW   Вверх
tofreesky
Дата 10.6.2010, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 152
Регистрация: 9.6.2010

Репутация: нет
Всего: нет



Можно ссылки на эллектронные версии? Я бы с радостью.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.