Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: Mikhail от Декабрь 14, 2006, 19:10



Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Декабрь 14, 2006, 19:10
В MSVC есть _outp( int, int ) и _inp( int ) для работы с памятью. Может применяться для взаимодействия с портом LPT.
Не нашел аналогов в MinGW-шном g++.
Подскажите пожалуйста наименование данных функций в MinGW-шном g++ их инслуды и необходимые библиотеки.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Декабрь 21, 2006, 19:25
Неужели никто не знает?


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: sandy от Декабрь 22, 2006, 16:20
Цитата: "Mikhail"
Неужели никто не знает?


Ты ж хакер, тебе виднее


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Декабрь 22, 2006, 21:17
Не смешно. Обидно получать детские ответы. Спрашиваю, потому что не знаю.
А ответ толковый получить хотелось бы.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: yurror от Март 02, 2007, 04:14
Mikhail, оно реально надо? объясни тупому человеку на кой?
запись по любому адресу в любой доступный участок памяти делается так
char *mem = 0xХРЕН_ЗНАЕТ_КАКОЙ_АДРЕС;
*mem = КАКОЕ_ХОЧЕШЬ_ЗНАЧЕНИЕ;

Другое дело что меня терзают смутные сомнения что _outp( int, int ) и _inp( int ) для работы с памятью :) хыхы... ибо они имеют довольно определенное имя иэто имя  говорит что они вообще-то для ввода/вывода через порты (ну что процессор портами считает)

так вот не уверен что это присутствует в MinGW.
Это эм... платформозависимые функции и они описаны в соответствующих заголовочниках.
#include <sys/io.h>

Mikhail, удачного хака LPT портов. почитайте лучше документацию на свой микропроцессор. много нового и интересного узнаете. а самое главное подобные вопросы сами отпадут.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Март 03, 2007, 19:36
Ну естественно хочется работать с LPT под MinGW так же просто как из под visual C (Windows) или g++(Linux). Не верится в отсутствие под MinGW подобных функций.
В #include <sys/io.h> искал.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Admin от Март 04, 2007, 03:16
не забываем что mingw это gcc
а gcc делался для unix, где работа с устройством - это чтение запись в файл
так что ее там не не будет


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Вудруф от Март 04, 2007, 08:29
Не забываем, что gcc - это GNU Compiler Collection, а чтение/запись в файл - это функции библиотеки.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Март 05, 2007, 08:38
Admin
Цитировать

не забываем что mingw это gcc
а gcc делался для unix, где работа с устройством - это чтение запись в файл
так что ее там не не будет


Я понимаю, что это работа с файлом, но ведь для того чтобы написать специальный файл для устройства LPT тоже необходимо иметь возможность писать/читать порты.

Ну так кто же ответит?


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: f_evgeny от Март 05, 2007, 11:28
Цитата: "Mikhail"
Admin
Цитировать

не забываем что mingw это gcc
а gcc делался для unix, где работа с устройством - это чтение запись в файл
так что ее там не не будет


Я понимаю, что это работа с файлом, но ведь для того чтобы написать специальный файл для устройства LPT тоже необходимо иметь возможность писать/читать порты.

Ну так кто же ответит?

Для того, чтобы работать с портами (устройством) под WinNT нужно писать драйвер. В MinGW Вы это не найдете.
Есть уже написанные драйвера, которые позволяют писать в произвольные порты. Специально для таких хаков, когда нужно работать с устройством, а драйвер писать неохота. Я когда-то использовал для этих целей DLPortio: http://www.driverlinx.com/DownLoad/DlPortIO.htm

Гугл еще выкидывает http://sourceforge.net/projects/portio Но это я уже не пробовал.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Март 07, 2007, 08:14
Цитировать

Для того, чтобы работать с портами (устройством) под WinNT нужно писать драйвер. В MinGW Вы это не найдете.
Есть уже написанные драйвера, которые позволяют писать в произвольные порты. Специально для таких хаков, когда нужно работать с устройством, а драйвер писать неохота. Я когда-то использовал для этих целей DLPortio: http://www.driverlinx.com/DownLoad/DlPortIO.htm



Согласен. DLPortio позволяет обращение к порту - это верно. Однако обращение производится функцией типа _outp( int, int ) и _inp( int ). Вот аналоги этих функций для MinGW мне и необходимы.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: f_evgeny от Март 07, 2007, 11:04
Цитата: "Mikhail"
Цитировать

Для того, чтобы работать с портами (устройством) под WinNT нужно писать драйвер. В MinGW Вы это не найдете.
Есть уже написанные драйвера, которые позволяют писать в произвольные порты. Специально для таких хаков, когда нужно работать с устройством, а драйвер писать неохота. Я когда-то использовал для этих целей DLPortio: http://www.driverlinx.com/DownLoad/DlPortIO.htm



Согласен. DLPortio позволяет обращение к порту - это верно. Однако обращение производится функцией типа _outp( int, int ) и _inp( int ). Вот аналоги этих функций для MinGW мне и необходимы.

Для того, чтобы такие функции были в инклудах MinGW, они как минимум должны быть в API операционной системы. А их там не может быть, по крайней мере для линии NT. Поэтому и в MinGW их быть не может.
Вот когда Вы устанавливаете DLPortio, появляются эти функции, дя чего, собственно DLPortio и служит.
А чем не устраивает DLPortio?


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Март 08, 2007, 17:24
Цитировать

Для того, чтобы такие функции были в инклудах MinGW, они как минимум должны быть в API операционной системы. А их там не может быть, по крайней мере для линии NT. Поэтому и в MinGW их быть не может.
Вот когда Вы устанавливаете DLPortio, появляются эти функции, дя чего, собственно DLPortio и служит.
А чем не устраивает DLPortio?


Не будем путать драйвер DLPortio, открывающий доступ к портам по чтению/записи, с функциями компилятора (например, gcc или VC), используемыми для конкретного чтения/записи в порты.
Для MS VC6 объявления функций :
int __cdecl _outp(unsigned short, int);
int __cdecl _inp(unsigned short);
находятся в файле .../VC98/include/conio.h,
а отнюдь не в API операционной системы.

Вот аналоги _outp и _inp для gcc мне и нужны.
Кто подскажет?


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: f_evgeny от Март 08, 2007, 18:10
Цитата: "Mikhail"
Цитировать

Для того, чтобы такие функции были в инклудах MinGW, они как минимум должны быть в API операционной системы. А их там не может быть, по крайней мере для линии NT. Поэтому и в MinGW их быть не может.
Вот когда Вы устанавливаете DLPortio, появляются эти функции, дя чего, собственно DLPortio и служит.
А чем не устраивает DLPortio?


Не будем путать драйвер DLPortio, открывающий доступ к портам по чтению/записи, с функциями компилятора (например, gcc или VC), используемыми для конкретного чтения/записи в порты.
Для MS VC6 объявления функций :
int __cdecl _outp(unsigned short, int);
int __cdecl _inp(unsigned short);
находятся в файле .../VC98/include/conio.h,
а отнюдь не в API операционной системы.

Вот аналоги _outp и _inp для gcc мне и нужны.
Кто подскажет?

Это для 9x? Думаю (уверен), это не будет работать на NT. То, что Вы привели, это и есть API операционной системы, только линии 9x. Думаю, что в инклюдах MinGW заложено API линии NT, а там таких команд быть не должно.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Март 09, 2007, 09:04
Для f_evgeny

Цитировать

Это для 9x? Думаю (уверен), это не будет работать на NT. То, что Вы привели, это и есть API операционной системы, только линии 9x. Думаю, что в инклюдах MinGW заложено API линии NT, а там таких команд быть не должно.



Да, это все откомпилированное VC6-8, работает и в 9х и в NT и XP . Проверено неоднократно.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: f_evgeny от Март 09, 2007, 10:40
Цитата: "Mikhail"
Для f_evgeny

Цитировать

Это для 9x? Думаю (уверен), это не будет работать на NT. То, что Вы привели, это и есть API операционной системы, только линии 9x. Думаю, что в инклюдах MinGW заложено API линии NT, а там таких команд быть не должно.



Да, это все откомпилированное VC6-8, работает и в 9х и в NT и XP . Проверено неоднократно.

А как же:
Цитировать
According to the documentation provided with Visual C++ 32-bit Edition, inp(), outp(), and the other port I/O related functions are Win32 and Win32s compatible. However, executing code that uses these functions causes a privileged instruction exception on Win32 on Windows NT. The code that uses inp(), outp(), and so forth will execute correctly on Win32s.
(http://support.microsoft.com/kb/112298)

Цитировать
Win32s is a layer that runs on 16-bit versions of Windows to provide access to 32-bit applications.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: Mikhail от Март 09, 2007, 17:32
Ну так и написано, как я говорю.
Функции inp(), outp() обеспечиваются именно компилятором Visual C++. Однако их использование в непривилегированном режиме вызовет исключение в Win32 и Windows NT. Это и понятно. Для использования привилегированного режима и применяется средства типа DLPORTIO.
Однако, функции работы с портами (inp(), outp()) должны предоставляться компилятором языка.
Повторяю вопрос. Какие функии работы с портами предоставляет MinGW как порт gcc для Windows?


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: f_evgeny от Март 09, 2007, 18:47
Цитата: "Mikhail"

Однако, функции работы с портами (inp(), outp()) должны предоставляться компилятором языка.
Повторяю вопрос. Какие функии работы с портами предоставляет MinGW как порт gcc для Windows?

- Не компилятором, а библиотеками. Которые привязаны к конкретной архитектуре.
- Насколько я себе представляю нет таких функций в MinGW. Если бы были то были бы в include/conio.h, а их там нет.


Название: MinGW. Какие сделать чтение/запись по адресу памяти
Отправлено: TeAnton от Май 26, 2007, 10:28
Я в этом деле чайник, но почему нельзя воспользоваться ассемблерными вставками?