Перейти к содержимому
IzzyForum

Leaderboard


Popular Content

Showing content with the highest reputation since 18.11.2018 in all areas

  1. 1 point
    Продолжение предыдущей статьи на тему кириллических (да хоть китайских) символов. Давайте взглянем правде в глаза, что все бренно и когда нибудь вам придется гуглить на тему как бороться с кодировками и во FASM. А если ты гуглишь про кодировки, то значит ты новичок. Добро пожаловать в статью. Итак - не нашел ни одного ответа на эту тему на первых двух страницах гугла. Если не нашел. Значит оставлю тут. Это пример программы из первой части, которая будем получать имя пользователя операционной системы, только на другом языке, почему я считаю что примеры на ассемблере наиболее понятны? Потому что там хоть как то объяснено как работает та или иная функция, откуда она появляется и че происходит когда наша программа не находит какую нибудь DLL, да изечка? Скока у тебя видосов про эти неприятности? Давай раскроем почему так. Наша с вами программа разделена на четыре части. И начнем мы с последней и самой интересной: Началом этой секции программы мы считаем этот зеленый заголовок. Он нам говорит что бы будем делать в этом блоке импорт библиотек (любых). Например тех которые находятся в папке "C:\Windows\System32" и являются стандартной библиотекой WinApi. Таких как User32.dll, Advapi32.dll, Kernel32.dll импорт которых вы видите во второй строке... А вот в последующих - фиолетовых строках вы можете увидеть импорт функций из этих библиотек - тех которые мы импортировали в программе на С++ из заголовка "windows.h", тут мы их берем напрямую без всяких лишних движений. Но на этот раз мы добавим еще к тому набору функцию ExitProcess - которая будет выключать нашу программу. Просто так - потому что захотелось. Тут начинает выполнятся наша программа. Она будет как и статье о С++ на данном форуме, делать тоже самое - получать имя пользователя и выводить его в окошке! Зеленый текст - объявляем секцию кода программы, который будет выполнятся. start: - это как раз таки аналог функции wWinMain() из первой статьи invoke GetUserNameW, _username, _lsize - это таже самая функция которую мы использовали в прошлый раз, она принимает теже значения и заполняет переменную _username именем пользователя. далее мы вызываем функцию MessageBoxW которая выведет переменную _username внутри окошка, тоже самое как и в первой статье. уловили? аналогия думаю яснее некуда. у нас одна и так же программа, которая ничем не хуже предыдущей, просто немного на другом языке, в котором нам становится понятнее как оно работает. А в самом конце программы - мы можем вызвать функцию ExitProcess которая принимает ноль как параметр, что бы завершить нашу программу. Если внимательно прочитать статью и заглянуть в импорты предыдущей секции - вы можете увидеть из какой библиотеки берется данная функция. И как бы все становится понятным. А теперь давайте взглянем на следующую секцию в которой мы будем объявлять русскоязычные переменные! Вот как то так... Помните я выделял красным символ L а тут я выделил красным символы - перед du русским текстом, а так же создал пустую переменную _username - которая равна ? (ничему) и имеет тип подобный WCHAR - DU. да да, именно так. все как в первой статье - действуем по аналогии. так же создадим третью переменную которая как и в первой статье у нас будет просто размером предполагаемого имени пользователя, которая пригодится в функции GetUserNameW которая таже самая функция, которую мы вызывали в предыдущей статье про С++. ясно? А теперь просто завершающие штрихи - Подключаем заголовки FASM и то что будем юзать в своей программе. Логично что нужно еще подключить заголовок для кодировки UTF-8, для текста на международных языках. и обозначим что главной функцией у нас будет start Закончим на этом. Компилируем программу - запускаем ее. Профит. Полная поддержка кириллицы нам обеспечена.
  2. 1 point
    Первое с чем придется столкнутся начинающему русскоязычному программисту - это конечно поддержка кириллицы и других языков, в том числе китайских и любых других. Почему это по моему мнению невероятно важно: потому что имена папок пользователя обычно называются по имени пользователя ОС (C:\Uses\USERNAME\), а в них хранится множество данных которые могут быть необходимы, имена папок могут быть китайскими, могут быть и русскими, а могут состоять из карточных мастей (лично я встречал пару-тройку таких ауешников) и если мы все сделаем неправильно - для латиницы, то у нас будет не очень хорошая программа. Мы же международные хацкеры, верно? Шо у нас тут такое? Это сразу оговорюсь С/C++, нам пригодится для того что бы понять что будем делать дальше. Тут простой пример программы, которая у нас получает имя пользователя и выводит его на экран в окошке. Компилировать можно и в Visual Studio и в GCC. Вообщем разберетесь как поймете что тут творится, а пользоваться мы будем стандратной библиотекой Винды. И использовать стандратные WinApi функции. Такие как - GetUserNameW() и MessageBoxW(); Так по порядку теперь - что у нас в каждой строчке? Подключение заголовков Тут мы подключаем заголовочный файл с импортом функций WinApi - GetUserNameW() и MessageBoxW(), на самом деле они там не находятся, а просто описываются и импортируются из библиотек advapi32.dll и user32.dll - соответсвенно. А находятся эти библиотеки в папке - C:\Windows\System32\ Что из этого следует - а то что другие программисты за нас уже потрудились и написали все основные функции, которые нам понадобятся для успешного ленивого программирования. И их множество, и их всех можно изучить и использовать. Главная функция Далее у нас идет ГЛАВНАЯ ФУНКЦИЯ. Она в большинстве примеров в интернетах ваших показана в другом варианте int main () { // четатам } - этот вариант консольный он нам не нужен абсолютно. Почему? А мы будем делать оконную программу. И не будем печатать ничего в консоль, потому что "Молчание - Золото". Наша программа будет невидима, до того момента, до которого мы захотим... Переменные тут мы создаем первую переменную со смыслом. переменная будет называться - "username", а так же содержать в себе символы WCHAR - те длинные буковки, которые будут на столько длинными что уместят в себя китайские иероглифы. в противоположность им есть обычные CHAR, на которых написано множество исходников англ программ, и вы можете путаться и бомбить сракотан из за проблем с ними. Берегу Ваш бесценный сракотан сейчас... Так продолжим. Те - мы содаем переменную - так: ТИППЕРЕМЕННОЙ ИМЯПЕРЕМЕННОЙ wchar_t USERNAME Далее у нас идет размер [_MAX_PATH + 1] переменной который мы хотим зарезервировать для нее в оперативной памяти. Сделаем его достаточно большим, что бы поместилась какая угодно билеберда (напоминаю про ауе-юзеров) Функции Теперь нужно записать что то в эту переменную, например имя пользователя? Для этого и пригодится нам функция GetUserNameW(), Ей нужно по документации передать два параметра. Первый параметр - это наша переменная, которая будет заполнятся именем пользователя, а вторая это так же предполагаемый размер имени пользователя. Странная хуйня, ну да ладно. Не я писал эти библиотеки. В итоге мы имеем действие в результате которого в пустую переменную - username - запишется имя нашего пользователя. Верно? ДА! Как проверить? Для этого есть другая функция - которая создаст окошко в котором будет написано имя нашего пользователя - MessageBoxW() Разберемся и в этой функции : MessageBoxW(NULL, username, L"Здарова!", MB_OK); MessageBoxW - это имя функции. NULL - это первый параметр, который равен - ничему, нулю, 0 - ну вы поняли L"Здарова!" - это текст по-русски - приставка L очень важна почему важна? она сообщает что это русский текст в WCHAR. если ее убрать - будет белиберда. я потом покажу. это так же заголовок самого окошка... MB_OK - это у нас кнопочка окей - тип окна... Итак и самое гланое - username это текст который у нас будет выводится внутри окна! Компилируем имеем - профит. Всплывающее окошко с именем пользователя.
  3. 1 point
    Для особо грамотных - это путь к скрину на компудаторе долбоёба.
  4. 1 point
    https://pp.userapi.com/c852216/v852216920/2ed6e/HtX22N6MnS4.jpg https://pp.userapi.com/c847123/v847123029/113485/LwoYYEJqAJg.jpg https://pp.userapi.com/c849220/v849220673/a2cc1/AsbvteIgD7E.jpg
  5. 0 points


×