Форум программистов, компьютерный форум, киберфорум
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Assembler WIN32 API в Windows 7: как вызывать функцию NtCreateThread из ntdll.dll https://www.cyberforum.ru/ assembler-x64/ thread1656833.html
Значит дело такое, решил я узнать, как вызывать функцию NtCreateThread из ntdll.dll Прототип был найден NtCreateThread( OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ProcessHandle, OUT PCLIENT_ID ClientId,
Assembler Переписать ASM код на C++ для x64 сборки приложения
Всем привет. т.к. я нубик в ASM, прошу помочь мне переписать ASM код на C++ (Мне нужно это для x64 сборки приложения) Вот сам код #include "stdafx.h" #include "xrTheora_Surface_mmx.h" #pragma warning( disable : 4731 ) #pragma pack( push ) #pragma pack( 1 )
Assembler Ld и релоки https://www.cyberforum.ru/ assembler-x64/ thread1643761.html
Всем ку. Есть код, который собирается линкером от mingw-w64 (ld) в "сырой код" (нулевая база). Каким образом можно прописать релоки? Ключи (r/q) не отрабатывают. Вообще, каким еще линкером можно обработать obj дабы заиметь "бинарник"?
Assembler Masm64 console hello world Надыбал кое что, вроде и ошибок нет а ничего не выводит( OPTION DOTNAME option casemap:none include temphls.inc include win64.inc include kernel32.inc includelib kernel32.lib OPTION PROLOGUE:rbpFramePrologue https://www.cyberforum.ru/ assembler-x64/ thread1641640.html
Assembler Клавиатурный сервис. Озвучивание клавиатуры, индикация Lock-клавиш
Всем привет, в общем нужно переписать программу под win32. Задание было таким: Клавиатурный сервис. Озвучивание клавиатуры (при нажатии клавиши) и индикация на экране NumLock, CapsLock и ScrollLock . Мне сказали, что передачу параметров можно организовать через stdcall, а насчёт всего остального я не знаю... Помогите пожалуйста! ; Внешние функции EXTERN GetStdHandle EXTERN...
Assembler Компиляция ml64 https://www.cyberforum.ru/ assembler-x64/ thread1582791.html
Для компиляции использую эту команду: ml64.exe /c Hello.asm /link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib /entry:main создается .obj и на этом все. Kernel32.lib, user32.lib, link.exe, ml64.exe в одной папке. Выдает ошибку "Отказано в доступе" или не найден LINK.EXE. подскажите как исправить??? (-:
Assembler Как правильно использовать "assume" в ml64.exe? Как правильно использовать "assume" в ml64.exe? Если в 32-битной версии я объявлял так: (assume eax: ptr STRUCT), то в 64-битной (assume rax: ptr STRUCT) выдает ошибку. Помогите пожалуйста. https://www.cyberforum.ru/ assembler-x64/ thread1548962.html Как создать 64-битное exe приложения на ассемблере? Assembler
Какие ассемблеры использовать, как сделать, что бы они в 64-битные программы делали?
Assembler Предел адресации Фактически, адресация выше 40 бит для ОЗУ (это уже 1 терабайт) крайне маловероятна... Следовательно, вопрос: используются ли для чего-либо ещё эти занебесные цифры (например, для отображения видеопамяти)? Или же таких диапазонов long mode не предусматривает? https://www.cyberforum.ru/ assembler-x64/ thread1525414.html Assembler Запуск кода MASM под Windows 7 x64 Понимаю, что эту тему поднимали уже сто раз, но я только начал изучать Ассемблер и вопросов у меня много. Работаю я на Windows 7 x64 и мне хочется работать в нормальной виндовой IDE, а не из DOS'а в виртуальной машине. Идеально конечно использовать Visual Studio, но как не понятно. Там есть возможность вставлять блоки кода на ассемблере в код файла на С, но я предполагаю, что тогда не удастся... https://www.cyberforum.ru/ assembler-x64/ thread1524126.html
Assembler MASM64 and FASM64, секции .const
Путеводитель по написанию вирусов под Win32: 3. Заголовок PE — Архив WASM.RU То, что большинство программистов называет флагами, формат COFF/PE называет характеристиками. Это поле является множеством флагов, которые задают аттрибуты секции (такие как код/данные, доступно ли для чтения или для записи). Чтобы получить полный список всех возможных аттрибутов секций, смотрите IMAGE_SCN_XXX_XXX...
Assembler MASM64 Menu, Ошибка построения ресурсов https://www.cyberforum.ru/ assembler-x64/ thread1416753.html
Я так хотел подружиться с менюшками, но никак. option dotname option casemap:none option PROLOGUE:rbpFramePrologue option EPILOGUE:rbpFrameEpilogue ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= include temphls.inc include win64.inc include kernel32.inc include user32.inc
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,696
16.03.2016, 10:14  [ТС] 0

Создание консольных приложений в 64-разрядной Windows Seven - Assembler - Ответ 8888865

16.03.2016, 10:14. Показов 16121. Ответов 22
Метки (Все метки)

Ответ

Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <windows.h>
 
VOID main(void)
{
    HANDLE hStdout, hNewScreenBuffer;
    SMALL_RECT srctReadRect;
    SMALL_RECT srctWriteRect;
    CHAR_INFO chiBuffer[160];       // [2][80];
    COORD coordBufSize;
    COORD coordBufCoord;
    BOOL fSuccess;
 
    // Получим дескриптор STDOUT экранного буфера из которого будем копировать и создадим
    // новый экранный буфер, в который будем копировать.
 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    hNewScreenBuffer = CreateConsoleScreenBuffer(
       GENERIC_READ |               // доступ к чтению/записи
       GENERIC_WRITE,
       0,                           // совместно не используется
       NULL,                        // атрибутов защиты нет
       CONSOLE_TEXTMODE_BUFFER,       // должен быть TEXTMODE
       NULL);                       // зарезервирован, должен быть NULL
    if (hStdout == INVALID_HANDLE_VALUE ||
            hNewScreenBuffer == INVALID_HANDLE_VALUE)
    {
        MyErrorExit("CreateConsoleScreenBuffer");
    }
 
    // Сделаем новый экранный буфер активным экранным буфером.
 
    if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) )
        MyErrorExit("SetConsoleActiveScreenBuffer");
 
    // Установим прямоугольник источника.
 
    srctReadRect.Top = 0;    // верхний левый: строчка 0, колонка 0
    srctReadRect.Left = 0;
    srctReadRect.Bottom = 1; // нижний правый: строчка 1, колонка 79
    srctReadRect.Right = 79;
 
    // Размер временного буфера равен 2 строчки x 80 колонок.
 
    coordBufSize.Y = 2;
    coordBufSize.X = 80;
 
    // Верхняя левая ячейка назначения временного буфера равна строка 0, колонка 0.
 
    coordBufCoord.X = 0;
    coordBufCoord.Y = 0;
 
    // Скопируем блок из экранного буфера во временный буфер.
 
    fSuccess = ReadConsoleOutput(
       hStdout,         // экранный буфер, из которого читаем
       chiBuffer,       // буфер, в который копируем
       coordBufSize,    // размер колонки/строки chiBuffer
       coordBufCoord,   // верхняя левая ячейка назначения в chiBuffer
       &srctReadRect);  // экранного буфер прямоугольника, из которого читаем  
 
    if (! fSuccess)
        MyErrorExit("ReadConsoleOutput");
 
    // Установим прямоугольник назначения.
 
    srctWriteRect.Top = 10;    // верхний левый: строка 10, колонка 0
    srctWriteRect.Left = 0;
    srctWriteRect.Bottom = 11; // нижний правый: строка 11, колонка 79
    srctWriteRect.Right = 79;
 
    // Копируем из временного буфера в новый экранный буфер.
 
    fSuccess = WriteConsoleOutput(
        hNewScreenBuffer,   // экранный буфер, в который будем записывать
        chiBuffer,          // буфер, из которого копируем
        coordBufSize,       // размер колонки/строки chiBuffer
        coordBufCoord,      // верхняя левая ячейка источника в chiBuffer
        &srctWriteRect);    // прямоугольник назначения экранного буфера
    if (! fSuccess)
        MyErrorExit("WriteConsoleOutput");
    Sleep(10000);
 
    // Восстановление исходного активного экранного буфера.
 
    if (! SetConsoleActiveScreenBuffer(hStdout))
        MyErrorExit("SetConsoleActiveScreenBuffer");
 
}
Функция ReadConsoleInput может быть использована для непосредственного обращения к буферу ввода консоли. Когда консоль создается, включается ввод информации от мыши, а ввод данных окна отключается. Чтобы гарантировать, что процесс получает все события ввода, этот пример использует функцию SetConsoleMode, чтобы включить ввод информации от окна и мыши. Затем он входит в цикл, который читает и обрабатывает консольные события ввода.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
VOID MouseEventProc(MOUSE_EVENT_RECORD);
VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD);
VOID KeyEventProc(KEY_EVENT_RECORD);
VOID GetInputEvents(VOID);
 
DWORD main(VOID)
{
    HANDLE hStdin;
    DWORD cNumRead, fdwMode, fdwSaveOldMode, i;
    INPUT_RECORD irInBuf[128];
 
    // Получим стандартный дескриптор ввода.
 
    hStdin = GetStdHandle(STD_INPUT_HANDLE);
    if (hStdin == INVALID_HANDLE_VALUE)
        MyErrorExit("GetStdHandle");
 
    // Сохраним текущий режим ввода для будущего восстановления при
    // выходе из программы.
 
    if (! GetConsoleMode(hStdin, &fdwSaveOldMode) )
        MyErrorExit("GetConsoleMode");
 
    // Включим события ввода от мыши и окна.
 
    fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
    if (! SetConsoleMode(hStdin, fdwMode) )
        MyErrorExit("SetConsoleMode");
 
    // Цикл чтения и обработки событий ввода.
 
    while (1)
    {
 
    // Ожидание событий.
 
        if (! ReadConsoleInput(
                hStdin,      // дескриптор буфера ввода
                irInBuf,     // буфер, в котором читаем
                128,         // размер буфера чтения
                &cNumRead) ) // число прочитанных записей
            MyErrorExit("ReadConsoleInput");
 
   // Направляем события соответствующим обработчикам.
 
        for (i = 0; i < cNumRead; i++)
        {
            switch(irInBuf[i].EventType)
            {
                case KEY_EVENT: // ввод с клавиатуры
                    KeyEventProc(irInBuf[i].Event.KeyEvent);
                    break;
 
                case MOUSE_EVENT: // ввод от мыши
                    MouseEventProc(irInBuf[i].Event.MouseEvent);
                    break;
 
                case WINDOW_BUFFER_SIZE_EVENT: // изменение размера
                                               // экранного буфера
                    ResizeEventProc(
                        irInBuf[i].Event.WindowBufferSizeEvent);
                    break;
 
                case FOCUS_EVENT:  // игнорирование событий фокуса
 
                case MENU_EVENT:   // игнорирование событий меню
                    break;
 
                default:
                    MyErrorExit("unknown event type");
                    break;
            }
        }
    }
 
    return 0;
}
Имеется два способа очистки экрана в консольной программе. Первый способ состоит в том, чтобы использовать системную функцию языка C во время выполнения как ниже указано:
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
#include <stdlib.h>
 
void main()
{
   system("cls");
}
Системная функция вызывает команду cls, предусмотренную интерпретатором команд, чтобы очистить экран.
Второй ― состоит в том, чтобы записать, что функция программно очищает экран, используя функции FillConsoleOutputCharacter и FillConsoleOutputAttribute . Нижеследующий типовой код демонстрирует эту методику.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void cls( HANDLE hConsole )
{
COORD coordScreen = { 0, 0 }; // исходная позиция для курсора
   DWORD cCharsWritten;
   CONSOLE_SCREEN_BUFFER_INFO csbi;
   DWORD dwConSize;
// Получим число символьных ячеек в текущем буфере.
 
   if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
      return;
   dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
// Заполним полностью экран пробелами.
 
   if( !FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',
      dwConSize, coordScreen, &cCharsWritten ))
      return;
 
   // Получим текущие атрибуты текста.
 
   if( !GetConsoleScreenBufferInfo( hConsole, &csbi ))
      return;
 
   // Установим соответствующие атрибуты буфера.
 
   if( !FillConsoleOutputAttribute( hConsole, csbi.wAttributes,
      dwConSize, coordScreen, &cCharsWritten ))
      return;
// Поместим курсор в его изначальные координаты
 
   SetConsoleCursorPosition( hConsole, coordScreen );
}


Вернуться к обсуждению:
Создание консольных приложений в 64-разрядной Windows Seven Assembler
2
Заказать работу у эксперта

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 10:14
Готовые ответы и решения:

Создание консольных приложений Windows
Когда-то у меня был Microsoft Visual C++ и я лишь клацал F5 для компиляции консольных приложений....

Найти книгу "Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows" в djvu
Здравствуйте. Весь инет обыскал, а найти книгу &quot;Создание эффективных WIN32-приложений с учетом...

Создание консольных приложений на С #. Нужно написать программу
Здравствуйте, уважаемые обитатели форума, мне нужна ваша помощь, помогите написать программу ... \...

Запуск консольных приложений с кириллицей на англоязычной Windows
Всем привет! Установил Windows 10 с английским языком интерфейса. Сразу столкнулся с проблемой:...

22
16.03.2016, 10:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2016, 10:14
Помогаю со студенческими работами здесь

Как создать свой шрифт для консольных приложений Windows XP?
я знаю, что у windows используется два шрифта для консоли: 1) Lucida Console - это библиотека...

Установка 64-разрядной поверх 32-разрядной Windows 7
Здравствуйте! купил бук, на нем стоит 7базовая 32бита, можно както поставить 64 не сшибая винду?...

Разработка консольных приложений
Как в консольном приложении обеспечить вывод текста в кодировке 866 (MS-DOS) при наборе его в...

Компиляция консольных приложений VC 6.0
Может быть я совсем дурак, но программировать ни разу не пробовал и даже не знаю с чего начать. Вот...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru