• XSS.stack #1 – первый литературный журнал от юзеров форума

Анси и вайд функции винапи

Что вы используете в кодинге?


  • Другие смогут видеть, как Вы проголосовали.

codedivision

RAID-массив
Пользователь
Регистрация
14.12.2018
Сообщения
71
Реакции
16
Использую в кодинге, как и большиство, анси функции винапи.
Знакомый кодер использует вайд функции, с его слов анси поддерживает только стандартную кодировку винды, а вайд как юникод иероглифы. Подтверждение этого (как и вообще какой-то информации об этом) найти не удалось.

Написал софт для теста, состоящий из следующих вайд функций винапи WriteFile, CreateFileW, CloseHandle, ExitProcess, InternetOpenW, InternetOpenUrlW, InternetReadFile, InternetCloseHandle, ShellExecuteW.
Скомпилировал, запустил - не работает
Изменил на анси CreateFileA, InternetOpenA, InternetOpenUrlA, ShellExecuteA - работает.

Предполагаю, что ошибка в кодировке системы. Но винда поддерживает только перевод основных интерфейсов, кодировка все равно будет стандартная.

Пишу на асме, мой компилятор не должен автоматически распределять анси и вайд функции.
 
Можешь скинуть код? Возможно ты даешь ему входные данные не подходящие, в ascii кодировке
Публичный пример для фасма wiremask.eu/articles/download-execute-assembly-x86.
Функции из последнего кода.

И добавь в опросе 3 вариант: зависимо от ситуации
У вайд только один недостаток - 2 байта.

Меня больше интересует теория с кодировкой винды и работоспособность софта с использованием анси функций на кодировках с иероглифами.
 
Последнее редактирование:
Публичный пример wiremask.eu/articles/download-execute-assembly-x86.
Функции из последнего кода.


У вайд только один недостаток - 2 байта.
Ну да, про 2 байта это да. Поэтому надо в зависимости от ситуации
 
Ну да, про 2 байта это да. Поэтому надо в зависимости от ситуации
Хотя он вроде даже 4 весит
Если мы про функции винапи, то анси - 1, вайд - 2.
 
Все что касается файловой системы и реестра нужно писать через Wide функции, представь что ты попал на арбскую или китайскую систему, где имя пользователя будет на их языке как обратиться к файлам из папки C:\Users\ИмяПользователя
Все что касается HTTP использует Ansi версии, причем Wide версии функций переводят содержимое в Ansi и вызывают Ansi функции. Когда для файловой системы и реестра, наоборот Ansi функции конвертируют содержимое и вызывают Wide функции, а потом иногда еще раз конвертируют и вызывают уже Native
 
Пожалуйста, обратите внимание, что пользователь заблокирован
ТС , открой для себя Рихтера, там c этой матчасти все и начинается.
Начиная с 2000 винды (т.е. уже овер 20 лет), внутри юзаются сугубо Wide функции. Анси - это просто обертки, за исключением неск. функ типа OutputdebugString , которые нативно ансишные.
 
Так же хочу посоветовать книгу Windows System Programming Харта книга тоже старая, но в отличие от Рихтера там зацепили Windows 7
И конечно же Windows Internals Русиновича, как раз вышло 7я редакция про Windows 10 - это must have!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Да, Харт хорошо пишет. Конкретно в данном вопросе Харт предпочитает юзать T-функции) т.е. в зависимости от настроек компилера.
На русском есть более старая версия книги, по ХР.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
О, голосовалка для переписи ебланов. Пока только один. (не считая ТСа)
Точно, там же utf16 юзается. Я что то залагала
utf16-le, если точнее
еще раз конвертируют
Ничего они дальше не конвертируют, а заполняют структуру UNICODE_STRING (кладут указатель на строку и ее длину), просто по какой-то причине в нейтив апи вместо нулевого терминейт символа юзается заранее прописанный размер в структуре. Максимум, что могут конвертировать это пути.
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх