Форум программистов, компьютерный форум, киберфорум
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
16276 / 7601 / 1064
Регистрация: 11.11.2010
Сообщений: 13,616
17.03.2016, 05:14  [ТС] 0

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

17.03.2016, 05:14. Показов 15187. Ответов 22
Метки (Все метки)

Ответ

Функция SetConsoleWindowInfo может быть использована для прокручивания содержания экранного буфера в консольном окне. Эта функция может к тому же изменить и размер окна. Функция может или задать новые верхние левые и нижние правые углы окна экранного буфера как абсолютные координаты экранного буфера или задать изменения от текущих координат окна. Функция терпит неудачу, если координаты определяемого окна находятся вне границ экранного буфера.
Нижеследующий пример прокручивает вид экранного буфера на одну строку, изменяя абсолютные координаты окна, возвращенные функцией GetConsoleScreenBufferInfo.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
SMALL_RECT srctWindow;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
// Получим размер текущего экранного буфера и позицию окна.
if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo))
MyErrorExit("GetConsoleScreenBufferInfo");
// Установим в srctWindow размеры текущего окна и местоположение.
srctWindow = csbiInfo.srWindow;
// Если окно не вверху экранного буфера, переместим его вверх на одну строку.
if ( srctWindow.Top > 0 ) {
srctWindow.Top -= 1;    // перемещение вверх на одну строку
srctWindow.Bottom -= 1; // перемещение вниз на одну строку
if (! SetConsoleWindowInfo(
hStdout,      // дескриптор экранного буфера
TRUE,         // абсолютные координаты
&srctWindow)) // зададим новое место
MyErrorExit("SetConsoleWindowInfo");
}


Та же самая прокрутка может быть сделана определением изменений в координатах окна.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Получим позицию текущего окна экранного буфера
if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo))
MyErrorExit("GetConsoleScreenBufferInfo");
// Если окно не вверху экранного буфера, переместим его вверх на одну строку
if (csbiInfo.srWindow.Top > 0) {
srctWindow.Top = -1;    // перемещение вверх на одну строку
srctWindow.Bottom = -1; // перемещение вниз на одну строку
srctWindow.Left = 0;    // не изменяется
srctWindow.Right = 0;   // не изменяется
if (! SetConsoleWindowInfo(
hStdout,      // дескриптор экранного буфера
FALSE,        // небольшие изменения, не абсолютно
&srctWindow)) // зададим новое место
MyErrorExit("SetConsoleWindowInfo");
}


Функция ScrollConsoleScreenBuffer перемещает блок символьных знакомест из одной части экранного буфера в другую часть того же самого экранного буфера. Функция устанавливает верхние левые и нижние правые ячейки исходного прямоугольника, который будет перемещен и координаты назначения нового местоположения для верхней левой ячейки. Символ и данные о цвете в исходных ячейках перемещаются в новое место, а любые ячейки, оставленные пустыми при перемещении, заполняются заданным символом и цветом. Если задается прямоугольник отсечения по границам, ячейки вне него остаются неизменными.
Функция ScrollConsoleScreenBuffer может быть использована для удаления строки, при помощи установки координат первой ячейки в строке как координаты назначения и установки прямоугольника прокрутки, который включает в себя все строки ниже этой строки.
Нижеследующий пример выводит на экран использование прямоугольника отсечения по границам, чтобы прокрутить только нижние 15 строк экранного буфера консоли. Строки в определяемом прямоугольнике прокручиваются вверх по одной строке за раз, а верхняя строка блока отбрасывается. Содержание экранного буфера консоли вне прямоугольника отсечения по границам остается неизменным.
Кликните здесь для просмотра всего текста
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
HANDLE hStdout; 
BOOL fSuccess; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 
SMALL_RECT srctScrollRect, srctClipRect; 
CHAR_INFO chiFill; 
COORD coordDest; 
 
hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
 
if (hStdout == INVALID_HANDLE_VALUE) 
    MyErrorExit("GetStdHandle"); 
 
// Получим размер экранного буфера. 
 
fSuccess = GetConsoleScreenBufferInfo(hStdout, &csbiInfo); 
 
if (! fSuccess) 
    MyErrorExit("GetConsoleScreenBufferInfo"); 
 
// Прямоугольник прокручивания содержит 15 нижних строчек экранного буфера. 
 
srctScrollRect.Top = csbiInfo.dwSize.Y - 16; 
srctScrollRect.Bottom = csbiInfo.dwSize.Y - 1; 
srctScrollRect.Left = 0; 
srctScrollRect.Right = csbiInfo.dwSize.X - 1; 
 
// Назначение прокручивания в прямоугольнике по одной строке вверх. 
 
coordDest.X = 0; 
coordDest.Y = csbiInfo.dwSize.Y - 17; 
 
// Прямоугольник отсечения - такой же самый, что и прямоугольник прокручивания. 
// Строка назначения остается неизменной
 
srctClipRect = srctScrollRect; 
 
// Заполним нижнюю строку зелеными пробелами. 
 
chiFill.Attributes = BACKGROUND_GREEN | FOREGROUND_RED; 
chiFill.Char.AsciiChar = ' '; 
 
// Прокрутим вверх одну строку.
 
fSuccess = ScrollConsoleScreenBuffer( 
    hStdout,         // дескриптор экранного буфера
    &srctScrollRect, // прямоугольник прокрутки 
    &srctClipRect,   // прямоугольник отсечения по границам 
    coordDest,       // верхняя левая ячейка назначения 
    &chiFill);       // заполнение символами и цветом

Это ― пример функции SetConsoleCtrlHandler, которая используется для установки управляющего обработчика .
Когда от CTRL+C принимается сигнал , управляющий обработчик возвращает (значение) 1 (TRUE), указывая, что он обработал сигнал. Это действие не допускает вызовы других управляющих обработчиков.
Когда принимается сигнал CTRL_CLOSE_EVENT, управляющий обработчик возвращает значение 1 (TRUE), заставляя систему показать на экране диалоговое окно, которое дает пользователю выбор окончания процесса и закрытия консоли или разрешения процесса, чтобы продолжить выполнение. Если пользователь выбирает не завершать работу процесса, система закрывает консоль, когда процесс наконец заканчивает свою работу.
Когда от CTRL+BREAK принимается сигнал CTRL_LOGOFF_EVENT или CTRL_SHUTDOWN_EVENT, управляющий обработчик возвращает значение 0 (FALSE). Это действие заставляет передать сигнал следующей управляющей функции обработчика. Если никакие другие управляющие обработчики не были зарегистрированы, или ни один из зарегистрированных обработчиков не возвращает значение 1 (TRUE), используется заданный по умолчанию обработчик, который приводит процесс к завершению работы.
Кликните здесь для просмотра всего текста
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
BOOL CtrlHandler(DWORD fdwCtrlType) 
{ 
    switch (fdwCtrlType) 
    { 
        // Обработка сигнала CTRL+C. 
 
        case CTRL_C_EVENT: 
 
            Beep(1000, 1000); 
            return TRUE; 
 
// CTRL+CLOSE: подтверждение, что пользователь желает выйти из программы
 
        case CTRL_CLOSE_EVENT: 
 
            return TRUE; 
 
// Передадим другие сигналы следующему обработчику
 
        case CTRL_BREAK_EVENT: 
 
        case CTRL_LOGOFF_EVENT: 
 
        case CTRL_SHUTDOWN_EVENT: 
 
        default: 
 
            return FALSE; 
    } 
} 
 
void main(void) 
{ 
    BOOL fSuccess; 
 
    fSuccess = SetConsoleCtrlHandler( 
        (PHANDLER_ROUTINE) CtrlHandler,  // функция обработчика 
        TRUE);                           // добавляется в список 
 
    if (! fSuccess) 
        MyErrorExit("Could not set control handler"); 
}


Вернуться к обсуждению:
Создание консольных приложений в 64-разрядной Windows Seven Assembler
2
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2016, 05:14
Готовые ответы и решения:

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

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

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

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

22
17.03.2016, 05:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2016, 05: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