В этом треде мы изучаем самый компактный и низкоуровневый язык Ассемблер и смежную с ним область: Реверс-инженеринга (RE).Вы пишите на ассемблере или собираетесь начать на нём писать? Программируете микроконтролёры, пишете драйвера для ОС, а то и саму ОС? Вам сюда.Вы изучаете алгоритмы работы закрытого софта, пишите патчи бинарников? Вам тоже сюда.Попрошайки с "решите лабу по асме за меня" идут в общий тред, а лучше нахуй.Шапка треда в процессе пополнения, пока так.Книги по RE:https://beginners.re/ - "Reverse Engineering для начинающих"- бесплатная современная книга на русском языке. К прочтению вкатывающимся и прочим ньюфагам обязательна!https://mega.nz/#!Bc9VVAYC!Vk6CFlW6VIoskLNgDKXbsL6FacDQeOKe6LX92wNicKY Нарваха практический курс по дебагингу https://www.goodreads.com/shelf/show/reverse-engineering - список книгСайты по RE:http://wiki.yobi.be/wiki/Reverse-Engineeringhttps://www.reddit.com/r/ReverseEngineering/comments/hg0fx/a_modest_proposal_absolutely_no_babies_involved/http://www.program-transformation.org/Transform/ReengineeringWikihttp://blog.livedoor.jp/blackwingcat/https://yurichev.com/blog/http://wiki.xentax.com/index.php/DGTEFFИнструменты для RE:1) IDA Pro 7.0.torrent2) IDA Pro 6.8.torrent3) IDA Pro 5.0 - бесплатная версия для некоммерческого использования4) ОстальноеВсе книги и статьи Криса Касперски (R.I.P.)https://yadi.sk/d/CxzdM1wyea4WP+ https://rutracker.org/forum/viewtopic.php?t=272818Книги по ассемблеру:"Архитектура компьютера" Э. ТаненбаумС.В. Зубков: Assembler. Язык неограниченных возможностей.Сайты по ассемблеру:Замена почившему wasm.ru- https://wasm.in/https://www.unknowncheats.me/wiki/Assemblyhttp://asmworld.ru/https://software.intel.com/en-us/articles/intel-sdmhttp://www.nasm.us/doc/https://sourceware.org/binutils/docs/as/index.html#Tophttps://msdn.microsoft.com/en-us/library/afzk3475.aspxДля ковыряющих винду и софт под неё, сайты с описанием структур со смещениями и разными версиями оных:http://msdn.mirt.net/http://terminus.rewolf.pl/terminus/http://geoffchappell.com/Предыдущие№2 https://arhivach.org/thread/255168/№3 https://arhivach.org/thread/301316/Абу пидарас убери рекапчу
Ну и где?
>>1126681>>1125801 https://github.com/RPCS3/rpcs3/tree/master/rpcs3/Emu/Cellhttps://github.com/dolphin-emu/dolphin/tree/master/Source/Core/Core/PowerPC/Jit64https://github.com/mirror/pcsxr/tree/master/libpcsxcore/ix86_64Последнее - это то, что ты ищешь.
Что делает эта инструкция?Почему при двух идентичных состояниях регистров (кроме ebp/esp) она в ecx пихает совершенно разные значения?
>>1128309FS - сегментный регистр, ссылающийся на сегмент с ненулевой базой, в котором по FS:0 лежит структура TEB. В TEB по 0x18 лежит "нормальный" адрес TEB. А по 0x2c лежит адрес массива указателей TLS, индексируется TLS-индексом, назначенным системой для модуля или выделенным с помощью TlsAlloc() (динамический TLS). Если это статический TLS, тогда по указателю лежит область памяти, содержащая thread-local переменные модуля. В противном случае все зависит от реализации.> она в ecx пихает совершенно разные значения?Массив выделяется из кучи при создании процесса, соответственно и адрес плавает.
А для ковыряльщиков микроконтроллеров есть что?
>>1129102Есть => /ra/
>>1126688Предлагаешь воспользоваться имеющимися наработками? Или просто ознакомиться для большего понимания*
Компилирую программу простую программуint main() {return 1234;}под turbo c compiler (1987-88 г.)скажите,почему в обджект файле все так просто (получил через obj2asm):;_main: push BP mov BP,SP;; mov AX,04D2h jmp short L8 хотя sourcer пишет что это delay for I/O, но никаких I/O не происходит;L8: pop BP retа экзешник раздувается под 5 кб? Там куча запросов версий доса и векторов прерываний, хотя это, имхо, нафиг не надо. Или я не прав? Так как с этим нереально работать в отладчике, то надо уходить от этого палеолита?Interrupt 1Ah : Real time clock ah=func xxhInterrupt 1Ah : ah=00h get system timer count cx,dxInterrupt 21h : DOS Services ah=function xxhInterrupt 21h : ah=25h set intrpt vector al to ds:dxInterrupt 21h : ah=30h get DOS version number axInterrupt 21h : ah=35h get intrpt vector al in es:bxInterrupt 21h : ah=40h write file bx=file handleInterrupt 21h : ah=4Ah change memory allocationInterrupt 21h : ah=4Ch terminate with al=return code
;_main: push BP mov BP,SP mov AX,07CEh jmp short L8;L8: pop BP ret
>>1130199Избавься от main(), и к тебе не будет прилинковываться сишный рантайм.
>>1130246Доступно)
поделитесь ссылкой на более-менее свежий hiew. Ну, 8,53-8.60.И вообще, насколько необходим этот инструмент?
>>1130757Хиев нинужен. Хочешь пердолиться в консольку - возьми радар.
>>1130880спасибо! Я так и знал, что Сусликов - пидор. Тот же Hex Editor Neo по возможностям, имхо, перекрывает хуёв. как только manhunter не ослеп пердолиться в консольку? Но в последнем можно патчить в мнемониках асма..Вообще, нужен опыт, тот же CyberGod на кряклабе круто запатчил Personal Editor 64: всего два байта.., но как он их нашёл? Какой логикой? Байты отстоят далеко от сообщений о регистрации, вложенность большая, нет однозначного джампа - есть sete и последующая проверка регистра х/з где..п.с. может, конечно, нашёл старую версию и патч к ней и посмотрел примерные места патча..
>>1131605>но как он их нашёл? Какой логикой?Уверен, не без помощи IDA.
Неофит ITT. Зачем в программе раскиданы CC? Антиотладочный прием? Если да, поможет ли замена CC на 90 везде, где можно? Может кто нибудь рассказать про флаг TF если не ошибаюсь. Он вроде включается, когда подключен отладчик, и даже kernel32.isDebuggerPresent уже особо не нужен, это так? Если да, как такое обходить?
>>1133044> Неофит ITT. Зачем в программе раскиданы CC? Антиотладочный прием?Просто заполнение пустых мест между функциями (как видишь адреса функций выровнены). Перекресных ссылок на них нет, так что заменить можешь на что угодно и ничего не поменяется. Ну а CC используется исторически чтобы случайно не выполнить непойми что когда хакер Васян тебе переполнение стэка устроит.
>>1133172Дополню: смысл не столько в этом. Смысл еще и в том, чтобы остановить спекулятивную предвыборку инструкций, потому что чаще всего инструкции следующей функции никому нахуй не вперлись.
>>1126092 (OP)Памахити с ida pro 7.0.Или ее криво взломали, или она сама кривая... В общем, если сделать синхронизацию сначала основного листа с псевдо-кодом, а затем с Hex'ом, то Ida закрывается с ошибкой на картинке.Самостоятельно не фиксится, может, есть какой-то способ?Я знаю, что можно переключаться по табу, и даже привык к этому, но если есть что-то, то дайте мне знать об этом.И еще, в 6.8 версии было намного удобнее с Hex-листом, так как нужное значение строки при наведении в asm-листе постоянно переносилось влево, но тут hex статичен. Че делать, как исправить?
Помогите прочесть значения регистра FS в интерфейсе olly. Что значит FS 0053? И что значит 270000 (FFF)? Единственное описание этих полей, которое я нашел - это 0053 - текущее значение FS, 270000 - размер сегмента, а FFF - максимальное значение в нем. Но из этого описания я не понял как, например, перейти в hex dump'е в этот регистр? Проста тупа Go to 270000 - это оно?
>>1133641> И что значит 270000 (FFF)?База (старт) и лимит.> Но из этого описания я не понял как, например, перейти в hex dump'е в этот регистр?Перейти в сегмент, ты хотел сказать? Да, можешь просто ввести адрес. А можешь Ctrl+G в окне дампа и сказать [fs:0x18] (по офсету 18 в fs хранится адрес, тот же самый, что ты видишь в окне регистров).
>>1132353Спасибо, Кэп!подскажи лучше, как сделать более "понятной" Иду? Чтобы как в х64/odbg показывались значения переменных, дампа, регистров, стека. Чтобы строки автоматом писались в виде комментариев в листинг, чтобы условные бряки ставить на стек и регистры, чтобы поиск строк был более хороший (а не как сейчас, пока не укажешь - не ищёт)
Кто нибудь может в двух желательно целую лекцию словах рассказать о роли structure exception handler'ах в антиотладочных мерах? Я так понимаю, это когда мы делаем бац:__try{__asm int 0x3}__catch(){bool debuggerDetected=false;}?Если да, то как это перехитрить и распознать в асм-листинге и если я не прав то что это вообще такое?
Пишу свой ассемблер, решил избавиться от call-ов. Только jmp-ы, только хардкор. Какие подводные камни? Пример:huipizda: inc eax // делаем какую-нибудь хуйню jmp ebx // прыгаем обратно. это обязанность коллера проставить правильный ebx
>>1134365Ну это древний скучный трюк, им даже ольгу первую не задурить вроде. Суть простая - дебаггер использует int3 (0xcc) для брейкпоинтов. Брейкпоинт вызывает исключение, исключение передается дебаггеру. Если дебаггер тупой, то не сымитирует для отлаживаемой программы исключение, а просто проглотит его и продолжит. Если программа не отлаживается, или отладчик нормальный, исключение никто не проглотит, управление получит обработчик исключения в программе и выставит флаг.
>>1134391> jmp ebx // прыгаем обратно. это обязанность коллера проставить правильный ebx Твоя функция вызывается более чем из одного места. Куда прыгать будешь, куда мать посадишь?
>>1134391Никаких, когда у тебя MIPS, ARM, OpenRISC или RISC-V.А когда у тебя x64, M68k или SPARC — жри сладкий хлебушек и не проси больше.
>>1134408У меня лейблы - это, считай, номера строк. Перед джампом в регистр пишеться, куда "функции" потом джампать:mov ebx some_labeljmp huipizdaИ в хуйпизде:jmp ebxВсе.Динамеские лейблы, короче.
>>1134420Да не, он у меня вообще будет интерпретироваться, игрушка считай.
>>1134423И чем это отличается от call?
>>1134423Тебе нужена инструкция branch & link как в АРМах. Только если хуйпизда другие функции вызывает, придется как-то адреса возврата менеджить. На стек складывать или по фиксированным адресам, если reentrancy не нужно.
Думаю, это известно, что большинство античитов занимаются вычислением хеша разных частей памяти процесса, дабы избежать хука.Мне один пиндос с OC рассказал что можно якобы безопасно хукать d3d9.Direct3DCreateEx ибо этим занимается не только малварь, а еще и фрапс, для захвата видео, к примеру.Насколько это правда?
>>1135821кури Proxy Dll или Dll Hijacking - можно что угодно хукать, не вмешиваясь в код процесса
Здравствуйте! Играю в Smash The Stack на io.netgarage под x86 и на пятом уровне возникли проблемы с осуществлением переполнениея буфера, в связи с чем есть вопрос.Собственно вопрос: а в сегментах данных исполняться нельзя что ли? А в сегменты исполняемого кода в таком случае писать вообще можно? Как же тогда делать атаку через переполнение буфера, если нет сегментов, которые одновременно и для записи и для исполнения? Я пришёл к такому выводу, потому что через GDB у меня всё работает как я задумал, а без него программка сегфолтится.Не хочу, чтобы вы мне рассказывали как проходить уровень, но хотелось бы, чтобы кто-нибудь ответил на мой вопрос про сегменты и пояснили про них поподробнее, если мои подозрения верны.
Есть ли анализатор вызова функций для js?Тот что на 2 пикче из ОП поста.
>>1136936По-хорошему, исполняться из .data нельзя, потому что NX-бит, а можно ли писать в .text - зависит от линкера (чаще нет). Атаку на переполнение буфера можно делать через ROP.>>1137177Теоретически ODA есть, но она говно. Зачем тебе на JS? Как вообще тебе в голову JS приходит, когда ты думаешь о байтоебле?
>>1137295>Как вообще тебе в голову JS приходит, когда ты думаешь о байтоебле? Байтоёб уровня /b/ пишет на JQuery на жабаскрипте. Ну хотя бы от нуля считает.
Пацаны, такая тема, ковыряю игру короче http://www12.plala.or.jp/zeek-heil/usio.htm, хочу извлечь тексты игровые, специально взял небольшую игрушку, потрениться. Дак вот, у неё движок kirikiri, на сайте https://kindkanjistudio.wordpress.com/2015/06/08/%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4-%D0%B8-kirikiri-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1/ про распаковку такого exe-шника сказано пользоваться утилитами типо - https://tlwiki.org/?title=Tools#KiriKiri2.2FKAG3 , но я не могу понять, никакая из них не может схавать этот exe-шник (либо я коряво их запускаю), однако ResourcesExtract-ором, я смог распаковать exe-шник. Но там лежат только иконки и файлы расширения .bin, совсем не xp3 и я не могу понять чё с ними делать. Подскажите как добраться до текстов игры.
>>1137741В /vn/ не пробовал обратится? Тут сидят суровые дядьки, ковыряющие Asm, а не скрипты интерпретаторов.
>>1137295>Теоретически ODA есть, но она говно. Зачем тебе на JS? Как вообще тебе в голову JS приходит, когда ты думаешь о байтоебле?Да всякие редиректы и части js эксплоитов.
>>1137754спасибо, там какой-то тред про реверс визуалок и в правду есть
>>1137757Ааа, тебе flow именно JS-кода? Нет, таких не знаю. Напиши, лол.
Поставил точку останова ИТТ.
>>1137899Проиграл.
>>1137295> Атаку на переполнение буфера можно делать через ROP.Спасибо большое за подсказку про NX бит и про ROP! Почитаю про это.
Посоветуйте красивые и мощные IDE для асма, шобы изпоткаропки всё летало без еботни с поиском линкеров, компиляторов, трансляторов, автокомплит, интеллисенс, вот это всё.
>>1138901http://www.visualmasm.com/
>>1138901имхо, за этим будущее, среди аутистов, прогающих фо фан:http://www.easycode.cat/English/index.htmставишь fasm, настраиваешь пути, редактор ресурсов, удаляешь прочие компили. Собирает одной кнопкой под х86/х64, полные либы и инклуды, большое сообщество (фасма). В visualmasm понравился файл помощи по API в hlp, хотя, для профессионалов надо качать новый сдк.
Сосоны, чего почитать чтобы сочинить свой калькулятор, т.е. для полного неофита? Алсо желательно под современные ОС, а не под ДОС.
Пригождается ли знание асмы?
>>1139728Смотря кому.
Собираюсь вкатиться в изучение асма. Но так как просто так изучать его нет смысла, собираюсь совместить его с полезным делом. В частности, хочу я запилить свою собственную сетевую ОС для некоторых сетевых устройств - маршрутизаторов, коммутаторов, точек доступа и аппаратных МСЭ.Собственно, чем отличается создание реализаций сетевых протоколов на асме от создании на нём каких-либо других приложений?Как я понимаю, сетевым интерфейсам, по-сути как и любым другим устройствам, выделяется некая область памяти, которая играет роль буфера I/O. Процессор считывает из этой области данные и, в соответствии с инструкциями сетевого протокола, их обрабатывает. Есть ли какие-либо мануалы/статьи, в которых описывается работа сетевых интерфейсов на самом низком уровне (не считая, собственно, непосредственное преобразование данных в электромагнитные волны на линии передачи данных)?
>>1140895> Собственно, чем отличается создание реализаций сетевых протоколов на асме Тем, что ты заебешься реализовывать сетевые протоколы на асме. Как и другие приложения. Возьми си и не выебывайся.> выделяется некая область памятиНе совсем. В общем случае девайс знает, что некоторый регион адресного пространства - его собственный (иногда это захардкожено, иногда девайс можно ремапить, изменяя этот регион). Девайс висит на некоторой системной шине и перехватывает запросы к своим адресам, таким образом чтение идет из его собственной внутренней памяти. Например по 0-0x20000000 у тебя DRAM, а по 0x60000000-0x60001000 - Ethernet MAC. А уж что у него там внутри - многокилобайтный FIFO или всего лишь десяток 32-битных регистров - зависит от реализации. Где-то DMA есть, который будет вместо тебя процессора копировать данные из оперативки, а где-то единственное, что доступно - это постоянная долбежка регистра своими байтиками, а где-то вообще TCP в железе реализован, включая автоматические ретрансмиты.> Есть ли какие-либо мануалы/статьиЕсть. Берешь даташит на железку, и там будет описано, как инициализировать, куда срать и как получать данные. Нет даташита? Ты в жопе. Даже при наличии существующих прошивок разобраться, как конкретно работать с железкой - очень сложная и времязатратная затея.
А вообще на сколько сложно устроиться на работу в офис/удаленку по соответствующему направлению? Сложно ли выполнять типичные задачи? Я вот пока разбираю семплы в свое удовольствие, но начинаю думать уже про трудоустройство. Призываю бывалых.
Что называют перекрёстными ссылками?
>>1141299Это когда ты переходишь по ссылочке, а там есть ссылочка, чтобы вернутся обратно.
Есть ли профит от изучения асмы, если хочу пойти по стопам бати в системное программирование?
>>1141234по реверсу без хорошего опыта работу найти анрил, ток в антивирусные лабы , паттерны для антивирей клепать
>>1141338>хочу пойти по стопам батиТвой батя вкатывался лет 15-20 назад, наверное. Сейчас в системное программирование почти никого не берут, там одни деды остались. Хотя если батя сможет устроить куда-нибудь, то почему бы и нет, главное, чтобы вышка была профильная.
>>1141391хороший опыт это больше, чем распаковка вмпрота 2 версии? 3 пока не могу
Народ я тут велосипед изобретаюсвою ос с блекджеком и шлюхами, но пруфоф не будет, посоветуйте где почитать про устройство файловых систем, а то сейчас просто через dd указываю где на образе hdd будет лежать загрузчик, ядро и прочая мелочь. Ну а то, желание прикрутить какой нибудь fat16 есть, а понимания как это сделать нету
>>1141399Деды выйдут на пенсию и придется брать новых.
>>1141530Ты хоть для самого себя ответь нужен ли тебе асм? Писать код на ассемблере без желания мазохизм в чистом виде.
>>1141530Брать некого, т.к вся молодежь ушла в веб
Почему вот это:ADC BYTE PTR [EAX + ECX], BYTE PTR [EBX + ECX]илиADD BYTE PTR [EAX + ECX], BYTE PTR [EBX + ECX]не компилируется? Я так понял, первый операнд у AD? - обязательно регистр, но чому так? Или просто так исторически сложилось и 2 области памяти никак не сложить?
>>1141616> посоветуйте где почитать про устройство файловых системВ википедии. Там ссылка на спеку MS по FAT есть.>>1141616> Я так понял, первый операнд у AD? - обязательно регистрНет. В инструкции может быть только один memory operand. Первый он или второй - дело твое.> просто так исторически сложилосьНе совсем. Причины даже не исторические,а архитектурные - там и способ кодирования инструкций не позволяет второй адрес закодировать, и длина инструкций увеличивается без особых выгод, и конвейер усложняется.> 2 области памяти никак не сложитьНет. Загрузи один из операндов в регистр.
>>1141659>Не совсем. Причины даже не исторические,а архитектурные - там и способ кодирования инструкций не позволяет второй адрес закодировать, и длина инструкций увеличивается без особых выгод, и конвейер усложняется.Понял, об этом не подумал.>Нет. Загрузи один из операндов в регистр.Не, я понимаю, что можно байт скинуть в DL и его прибавлять к области памяти, просто думал может я чего то не знаю и есть однокомандное решение
Что за хуйня пикрелейтед? Собрал win32 приложение на c++ без всяких либ, только чуть чуть winapi. Успешно запускал в ollydbg несколько раз, всё работало, а потом, после очередной компиляции, бац! и пикрелейтед. Какие то обработчики исключений, какие то DB F2, что это всё значит? В исходниках всего этого нет. Причем, если не аттачить дебаггер, то программа работает нормально и в отладчике, который идёт в комплекте с vs 2017 тоже всё нормально дебажится. ЧЯДНТ?
>>11417090xf2 - префикс REP. Наличие REP RET втыкатеся в целях оптимизации, потому что в амуде кривой бранч-предиктор. Отключи в настройках ольки superfluous prefixes в одной из вкладок Analysis.
>>1141715Эта опция уже была выключена. Что еще интереснее, я создал новый проект с теми же исходниками, и один раз он сработал, а потом снова нет
>>1141709>>1141715семены, просто выпилите рантайм и все. во время обучения он ни к чему.там в настройках линкера пошарь SAFESEH и тпну или погугли как написать пакер и настрой визуалку в соответствии с рекомендациями (там они обычно настроены под уменьшение размера экзешника)
>>1141753> выпилите рантайм> приложение на C++Охуительные советы уровня /b/.
>>1141715> амуде кривой бранч-предикторда-да, там в доке даже интеловском так написано по оптимизации. а какого вы лвл`а, коллега?
>>1141724Просто надо было включить, а не выключить.
>>1141755моя ошибка)) но сехи же можно выпилить, да и в целом заточить под минимальный размер
>>1141724Я пробовал включать. Всё равно та же херня>>1141759>>1141753звучит как костыли какие то. И самое главное - это не объясняет, почему раз в 3-4 пересборки приложение ведет себя адекватно, а потом снова как сука дикая
>>1141762у вас руки не от туда растут(( вот тут проскрольте до dynamicbase и чекните как настраивать компил
>>1141762>>1141776https://habrahabr.ru/company/xakep/blog/139138/
>>1141776>dynamicbase и как релоки создают проблему для олли? разве они восстанавливаются после входа в OEP? и в коде у меня никакой анальной привязки к дефолтному 0x400000 нет.
>>1141778вы блять не на oep, а на crt прологе, для начала обучения она нихуя не нужнапросто выпилите ее и отлаживайте что попроще
>>1141762> И самое главное - это не объясняет, почему раз в 3-4 пересборки приложение ведет себя адекватноИнкрементальная линковка. Какие-нибудь profile-based оптимизации? И я все равно не вижу проблемы в префиксах. Оно должно работать. Если не работает, скинь проблемый exe, я завтра гляну.
>>1141782он просто не понимает, что это за код> Какие то обработчики исключений, какие то DB F2, что это всё значит? В исходниках всего этого нет
крч выпили crt и все, прям по пунктам из статьи выше
>>1141781Разве crt-пролог выполняется до передачи управления на OEP? >просто выпилите ее и отлаживайте что попроще>>1141785>>1141786Это всё здорово, но объясните пж почему раз в N попыток программа нормально дебажится в олли, и всегда дебажится через дебаггер в вижаке и работает, если запустить как отдельный процесс? Как на это влияет c runtime, и что это за херня с исключениями в начале, для чего она генерируется?
>>1141789Проебался со скрином иды.
>>1141790Ну вот щито это? Это ли вообще гасит олли? Дело ли в олли, или в чем то другом?
>>1141789> Разве crt-пролог выполняется до передачи управления на OEP? в данном контексте пролог был принят за мусор, а так на oep и находится> исключениями в начале, для чего она генерируется?советую почитать нарваху/каран
>>1141789> что это за херня с исключениями в началеТак у тебя исключения от CRT лезут? Это нормально. Добавь в список игнорируемых и нажми Ctrl+F9.
>>1141715Вот бы тебя в сенпаи.
>>1141947>Вот бы тебя в сенпаи. Виабу штоле?
>>1141585Все молодешь ГеЙПиДОрыЪ
В общем, кажется проблема была вообще не в этом. Удалил служебные файлы олли рядом с её .ехе и всё заработало
>>1141955Нет.Ну в наставники, не суть.
как в цикле (JNZ loopAnchor ) сравнить 2 числа (reg, imm ИЛИ reg, reg), где второе число > 0 и при этом позволить изменить ZF но сохранить CF? CMP как я понял херит CF, т.к. флаги меняются как после SUB, TEST обнуляет CF. Думал было сохранять CF через LAHF, но потом я не могу его восстановить через SAHF, т.к. мне нужен ZF, а SHR AH, 1 может внезапно ZF в 0 поставить
>>1142365всё, вроде догодался.
Аноны, который уже вкатились, сколько вам лет?
>>1141502сходи на собеседование с ними, поболтай, задания посомтри какие. поймешь что да как, да они подскажут что подтянуть. На хабре полистай блок касперского антивируса, там всякие крекми есть интересные.
>>1141585>Брать некого, т.к вся молодежь ушла в вебтак мейнстрим же. вкатываться легче.А с реверсом/и глубоким пониманием что и как - надо быть упорнее, времени много тратить, опыт как то набирать. А с этим сейчас сложнее. Это раньше когда был диффицит информации, как то что есть, то и хавал, и все соки выжимал, и эксперементировал чтоб понять что и как. А сейчас информации море, тонешь в ней, порой дольше гуглишь решение, чем сделать несколько попыток самому победить. :(Сам несколько раз пытался в это вкатиться, но работу работать надо, и еще много чего. Еще в универе надо было вкатываться :(Интересно-интересно, но времени нет совсем :(
>>1143125у них там хуевый блог)) вот у eset куда лучше
>>1143125>сходи на собеседование с ними, поболтай, задания посомтри какие. поймешь что да как, да они подскажут что подтянутьспасибо за совет, приму))
>>1141391Насколько нудно клепать патерны?Из этого вообще развитие есть?
Кто-нибудь понимает в asm extended? Как мне вытащить значения из стека в массив?https://pastebin.com/LA6HBKYH
>>1144881Ты и сюда пришел? Объясни, чего ты хочешь добиться. Зачем тебе инлайн-асм, зачем тебе lea?void foo(int anything) { uinptr_t stack_copy[20]; memcpy(stack_copy, &anything, sizeof(stack_copy)); }И все. Если нужен адрес вовзрата, то копируешь не с anything, а с ((uintptr_t *) &anything) - 1.
>>1145026Инструкция call пушит значение регистра процессора eip на стек, как мне в функции вытащить этот адрес?
>>1145070> Если нужен адрес вовзрата, то копируешь не с anything, а с ((uintptr_t *) &anything) - 1.
>>1145071Алсо, если все делать правильно (для поддержки чего-то большего, чем x86), то в гцц внезапно есть __builtin_return_address(0), в других компиляторах тоже есть аналоги. Инлайн-асм зло.
>>1145072Круто, а я и не знал про это, спасибо.
>>1145072А можно ли как-то получить из адреса строку ассемблерного кода?
>>1145080имеешь в виду понять, что за инструкция по адресу? только дизассемблировать
Ньюфаг в треде. Есть %программа_нейм% заранее скомпилированная с флагами -fno-stack-protector и -execstack с помощью gcc. В проге изначально нет проверки на размер введенных данных. Если запускать прогу через gdb и использовать при вводе строку с определенным количеством символов и payload`ом, то payload успешно запускается. Если просто запускать программу в терминале, то та же самая строка с payload`ом приводит к сегфолту. В чем дело? Имеет место быть ASLR? На пикриле исходник программы и output dbg.
>>1145291> Имеет место быть ASLR?Ну так сделай printf("%p", main); в обоих случаях, и узнаешь сам. Другие указатели (буфер, например) тоже посмотри.
>>1145441Ньюфаг все еще на связи. Судя по пикрилу имеет место быть таки ASLR, но вот особенность: последний байт адреса все время равен de. То, что первые три байта равны x00\x00\x55 еще ладно, но почему последний то все время один и тот же. Это происки gcc?
>>1145909Не de, а 6de. И это перестает быть удивительным, если вспомнмить, что размер страницы - 0x1000 (4096) байт, т.е., 12 младших бит адреса задают смещение внутри страницы. Загрузчик, вне зависимости от того, рандомизируется ли адрес загрузки или нет, оперирует именно страницами - загружает файл в начало страницы, секции выравнивает на страницы, ядро права ставит страницам и т. д., поэтому ничего удивительного в этом нет.
>>1145928Я так понял, ты о пикриле говоришь. Но возникло несколько вопросов:1) В отладчиках отображаются линейные адреса?2) Если используются линейные адреса, тогда что подразумевается под словом "отображение"?3) Насколько велика разница между понятиями виртуальная и линейная память?
>>1146934>Насколько велика разница между понятиями виртуальная и линейная память? Линейная память (она же "плоская модель") - это когда не используются селекторы сегментов и вся память имеет непрерывное адресное пространство. В 64-битном режиме это единственная модель (в 32 битном режиме тоже можно использовать переключаемые через cs gs fs сегменты, но там они работают по другому - как указатели на таблицу дескрипторов). С сегментами и таблицей дескрипторов как раз связан один из костылей штеуд архитектуры, что страничная адресация работает поверх сегментного механизма и нам все равно нужно выделить минимум 1 сегмент размером со всю доступную оперативу.Реальная память есть только в досе с ограничением в 1 мегабайт. Все что современнее 95 винды использует виртуальную память. И ядро операционной системы тоже виртуальную память использует, все отличие лишь во флагах привелегий на страницах и в том что операционная система имеет возможность в том числе и сама себе страницы выделять. Для 64-битного режима полная процедура выглядит так:https://wiki.osdev.org/Entering_Long_Mode_Directly
>>1146934> Я так понял, ты о пикриле говоришьНу да. Во всех современных ОС используется страничная адресация, поэтому чтобы выделить память, ОС рано или поздно приходится найти свободную страницу физической памяти и отобразить ее в адресное пространство процесса.> Если используются линейные адреса, тогда что подразумевается под словом "отображениеНастройка таблицы страниц таким образом, чтобы при доступе к нужному тебе байту линейного адресного пространства он читался из нужной тебе страницы физической памяти. Проще говоря, маппинг - это когда у тебя есть какие-то данные, тебе похуй на их реальное расположение, но ты хочешь, чтобы программа нашла их по такому-то адресу. Или даже по нескольким разным, так тоже можно.> Насколько велика разница между понятиями виртуальная и линейная память?Линейные и виртуальные адреса можешь считать синонимами. Термин "линейная память" вообще не существует, есть линейное адресное пространство и адресация.
вкотился
>>1147515Знает кто где скачать полный курс данных видосов по at&t Ассемблеру в Линуксе? На канале CSC их почемуто ненашел, нашел только отдельные копии на других каналах
В какую сторону мне нужно точить жало, если я задумал сменить классическую виндовую блокировку ОС на свою кастомную и с кастомным анлоком? Перехват какого нибудь winlogon? А если хочу к уже существующему экрану блокировки добавить пару функций? Насколько это вообще осуществимо и задокументировано?
>>1147683Версия ОС? Раньше GINA была, в которой можно было все, теперь winlogon credential providers, в которых почти нихуя нельзя (документация у MS на сайте). Да, можно патчить винлогон, логонуи и прочих.
>>1147702Начнем с win10, опционально win 7 → win 10
>>1147702>теперь winlogon credential providersЧёрт. В этой ОС есть места, которые не портят при обновлении?ОП
>>1147724Хуясе, человек в проприентарном софте делает какие-то хотпатчи и жалуется на то что их ломает очередное обновление.
>>1147808Я ревершу до состояния исходников, которые обратно компилируются в идентичный код, а не патчу существующие.А жалуюсь я на урезание возможностей настройки. Когда читал "Внутреннее устройство Microsoft Windows", мне очень понравилась продуманность идеи с GINA, можно было написать своего провайдера авторизации хоть по измерению длины члена с фото с вебки, а сейчас узнаю, что всё опять порезали. И так везде, возможность настройки постоянно урезают, кнопки прибивают гвоздями. Проводник в сраной XP можно было изменить до неузнаваемости, любую панельку или менюшку можно было перетащить или вовсе отключить. А сейчас всё прибито гвоздями, и люди радуются каким-то сраным 3,5 настраиваемым нанокнопочкам в заголовке. Тьфу, что я тут распинаюсь.
Решил вкатиться в forth, начал с книжки Leo Brodie, Starting FORTH. Всё вроде было заебок, пока не дошло до всех этих BLOCK, LIST, LOAD. Пробовал gforth, win32forth, sp-forth, всё это или не работает, или работает через жопу. ЧЯДНТ?
Может кто нибудь рассказать что из себя представляет экран блокировки windows (win7+)? Это отдельный процесс, который запускается на весь экран? Или это просто explorer.exe подкидывает другой desktop?
>>1148181>Или это просто explorer.exe подкидывает другой desktop?this
>>1148188Сможет ли пользовательский процесс получить десктоп в нулевой сессии? Если я получу хэндлер десктопа, то в него можно запихнуть окно? Как мне получить десктопы, порожденные explorer'ом? Вообще, судя по пикрилейтед десктопы над процессами в иерархии, получается процесс может создать десктоп, но владеть им не будет, максимум иметь хэндл на него?
>>1148203>Сможет ли пользовательский процесс получить десктоп в нулевой сессии?Нет, она онально огорожена от кулхацкеров.
Пытаюсь использовать для отладки линуксовых приложений связку ida + gdbserver, но в ответ "Bogus or irresponsive server", хотя на таргет-клиенте видно, что TCP-подключение состоялось. Результаты подключения на пикрилах. ЧЯДНТ?
>>1148731Чому у тебя на первом скриншоте отладка виндового приложения? Тебе нужно делать Attach->Remote GDB debugger.
>>1148823На том скриншоте не туда нажал, но суть не меняется: при таком подключении выдает "bogus or irresponsive server". Я пытаюсь подключиться через Debugger -> Run -> Remote Linux Debugger.Если пытаюсь использовать Debugger -> Attach -> Remote Linux Debugger, то выдает то же самое.
>>1148892>kali pinus>ida>virtualbox>winЯсно
>>1148892Суть не меняется. Тебе слишком рано что-то делать в IDA. Для начала тебе нужно научиться читать: Remote GDB debugger. То, что ты выбираешь - это когда ты собственный линуксовый стаб от IDA (из IDA/dbgserv/ копируешь в Linux и работаешь через него.
>>1149173Я сразу пункт с GDB и не заметил, но мне от этого ничуть не лучше: я забыл что elf у меня 64-битный, а ида нет. Полную версию иды без вшитых васянами вирусами не найдешь. А ценник конский.
>>1149192Седьмая ида совершенно 64-битная, совершенно легально и фриварно лежит на официальном сайте. С возможностями там не очень, ограничения мешают жить, но x86 есть. Посмотри, может оно в отладку тоже умеет.
>>1149192>Полную версию иды без вшитых васянами вирусами не найдешь.Прямо на рутрекере, антивири ругаются только на файл патчера ИДЫ, чтобы она открывала старые базы, созданные в пиратских версиях, можешь этот файл просто не качать, если больше доверяешь продажным анивирусам, чем мочераторам и пользователем рутрекера. Я скачал, брат жив, микроволновка греет еду.
ПАЧИМУ БЛЯТЬ
>>1150965патамуштаmov [bx], dl
>>1150969Или хотя бы без ptr
>>1150981Но мне же нужно положить DL в нижнее слово, находящееся по адресу BX. Или это что, мне надо сделать какой нибудь AND DX, 00FFhMOV [BX], DX?
>>1151135Да. Или movzx dx,dl (на байт короче).
Не тоните
Сап прогуны, есть тут ктонибудь, кто пишет на асме для mc68k? Или я один такой даун?
Как на masm32 изменить какой-нибудь пиксель на монике, выдать какой нибудь писк на аудио выход? Хочу уже что-нибудь прикольное сделать.
>>1156434> изменить какой-нибудь пиксель на моникеinvoke GetDC,0mov esi,eaxinvoke SetPixel,esi,1,1,0ffff00ffhinvoke ReleaseDC,0,esi> выдать какой нибудь писк на аудио выходinvoke MessageBeep,-1Для остального идешь на MSDN и читаешь документацию по интресующей теме.
>>1156434Про внутренний бипер тебе уже сказали >>1156487Если хочется именно через аудио выход, то придется пердолить имеющиеся в системе audioApi.
>>1156487>>1156586Спасибо
Суп, анонасы. Решил покопать сишную библиотеку avr-libc под свой микроконтроллер после того как увидел что в ней нету функции pgm_read_block() для чтения из памяти, а функция eeprom_read_block() для EEPROM'а есть.Ну и залез в функцию pgm_read_word() которая возвращает 16-битную переменную по адресу в программе и что же я вижу:#define __LPM_word_enhanced__(addr) \(__extension__({ \ uint16_t __addr16 = (uint16_t)(addr); \ uint16_t __result; \ __asm__ \ ( \ "lpm %A0, Z+" "\n\t" \ "lpm %B0, Z" "\n\t" \ : "=r" (__result), "=z" (__addr16) \ : "1" (__addr16) \ ); \ __result; \}))Описание для lpm здесь: http://www.microchip.com/webdoc/avrassembler/avrassembler.wb_LPM.htmlВкрации: lpm читает один байт по адресу, а мы получается читаем байты по адресу 160 и 176, как я понял.То есть одно 16-битное слово занимает 32 бита в програмном пространстве?Если да, то почему это так сделано?
>>1156965> То есть одно 16-битное слово занимает 32 бита в програмном пространстве?Попробуй яснее выражать свои мысли.Нет. 16-битное слово занимает 16 бит. Но адресация для LPM байтовая, т.е., ты кормишь ему адрес байта (адрес слова * 2 байта в слове) в отличие от других инструкций, где ты кормишь адрес слова. LPM по-прежнему читает слово, но возвращает только один из байтов. Какой именно - зависит от младшего бита.> а мы получается читаем байты по адресу 160 и 176Чо?
>>1156975Ну вот эта часть кода:"lpm %A0, Z+" "\n\t" \"lpm %B0, Z" "\n\t" \Что именно делают эти инструкции? Они разве не из соседних слов читает? Для двойного слова инструкция выглядит так:#define __LPM_dword_enhanced__(addr) \(__extension__({ \ uint16_t __addr16 = (uint16_t)(addr); \ uint32_t __result; \ __asm__ \ ( \ "lpm %A0, Z+" "\n\t" \ "lpm %B0, Z+" "\n\t" \ "lpm %C0, Z+" "\n\t" \ "lpm %D0, Z" "\n\t" \ : "=r" (__result), "=z" (__addr16) \ : "1" (__addr16) \ ); \ __result; \}))
>>1156998> lpm %A0, Z+Прочитали в младший байт result младшие 8 бит 16-битного слова, инкрементировали Z. В Z при этом установился младший бит, т.е., следующий lpm прочитает старший байт.> lpm %B0, Z+Прочитали во второй байт кусок result старшие 8 бит 16-битного слова, инкрементировали Z, при этом младший бит сбросился (1 + 1 (mod 2) = 0), тем самым мы перешли к чтению младших 8 бит следующего 16-битного слова.> lpm %C0, Z+Прочитали младшие 8 бит второго 16-битного слова, инкрементировали Z (младший бит установился), чтобы в дальнейшем прочитать старшие 8 бит.> lpm %D0, ZПрочитали старшие 8 бит второго 16-битного слова. Z инкрементировать не стали, т.к., больше ничего читать не собираемся.
>>1157010Окей, а зачем там "\n\t" нужно?
>>1157042Куда ты лезешь, если такого не знаешь? Инструкции в __asm - это текст. Чтобы инструкции были на разных строках, воткнули символ новой строки (\n), чтобы в листинге все было красиво выровнено, воткнули символ табуляции (\t). Если не втыкать эти символы, будет __asm("lpm %A0, Z+lmp %B0,Z+ итд.".
>>1157050>Куда ты лезешь, если такого не знаешь?Ну я же говорю, так на С писал, сейчас решил библиотеки раскопать, а там ассемблер оказывается.
>>1157062Так это и есть стандатный сишный синтаксис строковых литералов.
Не уверен в сишный тред или к вам писать, но у меня ещё вопросы есть, которые ближе к вам, чем к си поэтому напишу сюда.Из пиков видно, что массив чаров объявлен раньше интов, а адрес у него больше. Это доказывает, что стэк растёт от большого адреса к маленькому. Но зачем так? И что в тех 12ти байтах после конца массива интов (804) и перед началом массива чаров (810)?Как происходит малок? Это же операционная система должна найти место в памяти подходящего размера и записать в таблицу кем эта память занята. Так же и с виртуальной памятью. Или это всё на уровне хардвара в процессоре реализовано? Или как например происходят другие системные вызовы типа гетчар? Вот это процессор точно не может сам сделать. Значит процессор как-то отличает мою программу от программы операционной системы и помогает им общаться? Но как?
>>1157068> что массив чаров объявлен раньше интов, а адрес у него больше. Это доказываетРовно нихуя не доказывает. Другой компилятор мог положить локальные переменные в другом порядке. Чтобы узнать, куда растет стек, нужно хотя бы раскидать локальные переменные по разным функциям:void bar(int arg) { printf("bar.arg at %p\n", arg);}void foo(int arg) { printf("foo.arg at %p\n", arg); bar(0);}int main(void) { foo(0); }> И что в тех 12ти байтах после конца массива интов (804) и перед началом массива чаров (810)?Что угодно. Другие локальные переменные, временные переменные, созданные компилятором. Можешь сдампить память и узнать (или компилировать с -S и или -save-temps и узнать гораздо быстрее и точнее).> Как происходит малок?Как-нибудь. Почитай K&R, там было чуть ли не упражнение по написанию своего маллока.> Это же операционная система должна найти место в памяти подходящего размераМенеджер кучи просит у ОС большой кусок памяти и поддерживает какую-нибудь свою структурку (например, linked list), в которой хранит список свободных и занятых блоков. Если в списке блоков нужного размера не находится, просит у ОС еще кусок памяти и т. д.> Или как например происходят другие системные вызовы типа гетчар?getchar() реализуется через read(), который реализуется через одноименный системный вызов. Дергается какое-нибудь программное прерывание или его аналог, процессор сохраняет контекст, переключается в привелигированный режим, код ОС дергает железку за порты, переключается обратно, восстанавливает контекст и продолжает выполнение. Ну это если MMU/MPU есть. Если нет, то просто дергаются функции ОС.Можешь почитать классическую "Архитектуру компьютера" Таненбаума, там все гораздо более подробно.
>>1157076Бля, в коде в printf & забыл, ну ты понял.
>>1157076Бля. Это мне только литературы добавило. Ок. После этой книги те прочитаю.
>>1157078>>1157076Спасибо забыл сказать. Спасибо
Подскажите как в Ассемблере перевести восьмеричную систему счисления в двоичную. Как перевести то я разобрался, а вот как записать восьмеричное число не могу.-a 100mov ax,6mov bx,7mul bxmov bx,axmov cx,8shl bl,1mov al,0adc al,30int 29loop 10dint 20
>>1159683Я нихуя не понял, что у тебя за код, и зачем там int 29. А как переводить:1) Обнуляешь регистр с результатом.2) Сдвигаешь регистр с результатом на 3 бита влео.3) Берешь очередной символ восьмеричного числа, преобразуешь в двоичный вид (вычитаешь ASCII-код '0').4) Объединяешь с результатом через add или or.5) Повторяешь с шага 2.Или тебе обратно нужно? Тогда берешь очередные три бита, прибавляешь '0', кладешь в буфер, повторяешь. При необходимости выводишь задом наперед.
>>1159811А как код выглядит тогда?
На правах бампа - вот такие схемы как на 2 и 3 оп-пиках чем делаются? Идапро? Так любую программу можно представить, если она на Си?
>>1166210Это graph view в иде. На чем написано - не имеет значение.
Вопрос по структуре РЕ файла. Я правильно понимаю, что по VA из 12 data directory DATA_DIRECTORY_IMPORT_IAT хранятся расположенные подряд заглушки, куда загрузчик впишет адреса функций, а в каждом дескрипторе импорта во 2 data directory DATA_DIRECTORY_ENTRY_IMPORT в поле FirstThunk пишется RVA, который указывает на первую заглушку в области [DATA_DIRECTORY_IMPORT_IAT]?
>>1168152> который указывает на первую заглушку в областиНа первую для данного дескриптора.
>>1168404Ну да, это я забыл уточнить. В остальном всё верно?
>>1168582Да.
Надо занести в адреса из ds секции, что ниже, обычные integer. Если просто вписываю 5 без ебли с регистром edx — все работает. a и b — параметры функции.Инструкция:mov edx, mov dword ptr ds:[0x9DB2B8], 0mov dword ptr ds:[0x9DB2B4], edxmov edx, [a]mov dword ptr ds:[0x9DB2BC], edxmov dword ptr ds:[0x9DB2C0], edxmov byte ptr ds:[0x9DB2C8], 1
>>1169370Дополнение: еблёй с edx регистром нихуя не работает. Что неправильно в инструкции?
>>1169372Ты бы на русском для начала писать научился. ЯННП. В инструкции все так. В первой строке, очевидно, нужно второй операнд дописать. Префикс ds: можно выкинуть.
>>1169654Маня, эти адреса в ds секции. Это основы ассемблера.
>>1169813Какие секции в 32-битном защищенном режиме, поехавший? И вообще, ты с сегментами путаешь.
Так вышло, что мне нужно делать кое какие вещи с произвольным PE файлом. Например, добавление нового импорта не созданием дескриптора импорта в конце таблицы импорта, а вставкой в существующий, если импорт такой библиотеки уже есть или вообще вставить свой код в уже существующий. Насколько я знаю, мне нужно учитывать, что такие манипуляции приведут к тому, что все инструкции с операндами-адресами в исполняемых секциях будут указывать не туда, куда нужно. Кажется, для решения проблемы с адресами не нужно написать дизассемблер или его функционал, которым я бы анализировал все инструкции, и если один из операндов - адрес, то к нему нужно прибавить дельту, которая образуется в результате моих действий. На данный момент я рассматриваю x86 архитектуру. Сейчас я на следующей стадии: вот я считал и распарсил PE файл и имею под рукой указатель на начало секции и начинаю считывать побайтно. Насколько я понял, каждая инструкция имеет общую структуру, и я типа должен как то понять по первому байту что это за инструкция. Тут у меня несколько вопросов.0. Не проебался ли я где то в рассуждениях выше? Ничего не пропустил и ничего не переусложнил?1. Я поискал различные списки инструкций x86 и охуел от всяких расширений типа FPU, SIMD, MMX, SSE1/2/3/4. У них там какие то свои стеки, свои регистры, охуеть. Я как бы вообще не реверсер, но те несколько раз, что я расчехлял иду и олли, я никогда не видел всех этих st(0) FPOPA MMX и всего прочего. Из того, что я прочитал об этих расширениях мне показалось, что это всё как бы виртуальная хуйня, которая всё равно в конечном счете преобразуется в голый классический x86 с его классическими ADD EAX EBX. Это так?2. Можете посоветовать годных и максимально современных гайдов по написанию дизассемблера, где были бы приведены в коде структуры инструкции, процесс парсинга и всё такое? Всё, что я находил, там просто в общих чертах говорилось о структуре команды и всё такое, но никакой прям особой конкретики и подводных камней, которые мне кажется должны быть.
>>1170282>. Это так?Нет. Просто векторизация непростая штука, автоматически компиляторы оче редко ее могут сами применить, а интринсиками кодить то еще удовольствие. Их применяют в числодробильне и графике дабы выжать производительность, с повсеместным расппостранением gpu это почти потеряло актуальность,потому да, встретить можно редко и только в специфичном по. Декомпильни какой-нибудь opencv, скажем, там 100% есть sse.
>>1170282>и если один из операндов - адрес, то к нему нужно прибавить дельту, которая образуется в результате моих действий.И вот на этом моменте ты сосёшь, так как нельзя сходу определить, где константный адрес, а где смещение от текущего места. Даже я, сверх хуёвый реверсер, однажды наткнулся в IDA на место, где она проебалась, пришлось поправлять. А ведь иду пишут не первый год не самые тупые люди.Если у файла есть таблица релокаций, то она тебе поможет потаскать код туда-сюда целиком секцией, но при добавлении внутрь всё равно возможен проёб, так как релоки учитывают возможность перенесения образа целиком, и не правят относительные адреса, а с ними возможен проёб выше.>Насколько я понял, каждая инструкция имеет общую структуру, и я типа должен как то понять по первому байту что это за инструкция.Если не применяются антиотладочные приёмы, то да.>никогда не видел всех этих st(0) FPOPA MMX и всего прочего.Просто повезло. Это математические расширения, применяются в игорях и работах с числами, в обычном коде разве что компилятор применит векторизацию, но редко когда.>где были бы приведены в коде структуры инструкции, процесс парсинга и всё такое?В шапке по ссылке https://software.intel.com/en-us/articles/intel-sdm гайды от интела, лучще него тебе никто не опишет. Но там тыщи страниц, ты охуеешь всё это читать.АЛСО, я ОП-долбоёб, думаю скоро придёт сажа-кун и пояснит конкретно.
>>11702821) Автоматическое дизассемблирование произвольного кода невозможно. Ну то есть вообще, никак. Можно пытаться решать частные задачи: ограничиться каким-то набором компиляторов, закладываться на отсутствие кода, написанного вручную на ассемблере и/или сгенерированного протектором и т.д., но это нетривиально даже при условии использования какого-нибудь capstone, который разберет инструкции за тебя.2) Зачем тебе добавлять импорт именно к существующему дескриптору? Все отлично работает, если добавить новый дескриптор (это нормально, существуют exe, собранные стоковыми тулсетами, в которых есть несколько дескрипторов для одной DLL).3) Если тебе нужен не произвольный PE, а более-менее современный, то у них всех есть релоки, по релокам можно находить ссылки на IAT, что позволяет делать с IAT что угодно, с большой вероятностью ничего не сломав (если что-то ссылается на thunk, ты можешь это что-то поправить, не разбирая даже саму инструкцию).> вставить свой код в уже существующийТут проще. Можно стащить из нужного места кода любое целое количество инструкций (понадобится дизассемблер длин как минимум), воткнуть jmp на свой код, а потом корректно выполнить оригинальный код и вернуться.> где были бы приведены в коде структуры инструкции, процесс парсингаIntel SDM уже посоветовали. Конкретно второй том, первые главы (instruction format) и Appendix A с бесконечными табличками инструкций. Как ты это парсить будешь - дело твое. Можно табличками и масочками, можно длинным свитчем и масочками. Это самая меньшая проблема.Алсо, посмотри на готовые инструменты типа Intel PIN, DynamoRIO и т. д. Может, тебе и не нужно все это велосипедить? Но за динамическое инструментирование приходится платить производительностью - на некоторых алгоритмах ты вообще ничего не заметишь, но зато на других будешь сосать довольно сильно.>>1170331Собираешь любой код с -m64, и вычисления с плавающей точкой будут на SSE, ибо FPU давно уже легаси. В 32-битном коде тоже можно (-mfpmath=sse), но из-за ABI оно не используется по умолчанию даже если сказать -msseX.>>1170337Да мне добавить в общем-то нечего. Просто я сначала ответил, а потом увидел, что ты уже отписался.
>>1170380> ограничиться каким-то набором компиляторовА это как влияет на сырые байты? Какая мне разница, кто транслировал код и с какого языка, если в итоге он всё равно биективно отображаем в ассемблерный листинг. Или я чего то не знаю о современных компиляторах? У меня ведь задача не восстановить точно было ли i = i+1 или i++.>Зачем тебе добавлять импорт именно к существующему дескриптору? Выглядит как то по уродски, по мне так это может служить знаком, что в файл могли что нибудь инжектить и докидывать недостающие импорты.>Может, тебе и не нужно все это велосипедить?Да, в идеале бы этого избежать. Сейчас смотрю на capstone, посмотрю еще на интел пин и динаморио. Мне бы в идеале какую нибудь C/C++ либу дизассемблирования с исходниками, чтобы я мог .lib себе собрать и из нее дергать нужный функционал.>Тут проще. Можно стащить из нужного места кода любое целое количество инструкций (понадобится дизассемблер длин как минимум), воткнуть jmp на свой код, а потом корректно выполнить оригинальный код и вернуться.Ну да, но при этом мне нужно либо пихать свой детур в хвост секции либо создавать новую, если в текущей места нет, но мне вот в идеале нужно инжектить где то внутри исполняемого кода, чтобы всё выглядело монолитно. И про дизассемблер длин почитал. Окей, а эту штуку как написать? Я так понимаю, мне так же придется считывать первые байты инструкций и по какой нибудь таблице определять длину? На вики/краклаб вики написано, что процессоры тоже определяют длину команды как то. Как такое вообще блять гуглить?> Если тебе нужен не произвольный PE, а более-менее современный, то у них всех есть релоки, по релокам можно находить ссылки на IAT, что позволяет делать с IAT что угодно, с большой вероятностью ничего не сломав (если что-то ссылается на thunk, ты можешь это что-то поправить, не разбирая даже саму инструкцию).Вот тут не понял к чему ты это. Пока пытался понять, задался следующим вопросом: Раз загрузчик может загрузить либу по любому адресу, все импорты обкладываются релокациями? А если я уберу dynamic base из nt optional header и обнулю data directory relocbase, и при этом в импорте будут либы с одним и тем же image base, то загрузчик жидко пёрднет и умрёт?. Ты предлагаешь вешать хук на вызов импортируемой функции? Типа по релокам и IAT я нахожу, что в таком то месте executable секции идет вызов импортируемой функции, и вот тут я меняю адрес call на свой хук, там делаю что мне надо, восстанавливаю стек и регистры и вызываю импортируемую функцию, а затем ret?
>>1170380>вычисления с плавающей точкой будут на SSEНуок, но это всё-таки милипиздрическая часть SSE, по сути только арифметика и только плавающей точки, и та в формате "movsd - mulsd - movsd", т.е. несколько инструкций из сотни.
>>1170418> Какая мне разница, кто транслировал код и с какого языкаИмея ограничания, ты можешь делать предположения. Что вот эту последовательность инструкций можно не разбирать, а брать как блок с известной функциональностью (всякие вещи, связанные с обработкой исключений или шаблонный код _initterm). Что какие-то вещи компилятор делать не будет (например, применительно к задаче про импорты, не станет делать position-independent code, или хотя бы не станет адресовать импорты таким способом). Что если данные ближе к началу RW секции - то для такого-то компилятора они на самом деле константа (например, таблица виртуальных функций).> по мне так это может служить знаком, что в файл могли что нибудь инжектить и докидывать недостающие импортыЯ тебе поэтому и сказал, что это нормально так линковаться для нормальных приложений. Например, если это объектник и либа, и в одной символы с __imp__, а в другой без. Или если компиляторы объектника и либы разные.> Окей, а эту штуку как написать?Блять, формат инструкций в Intel SDM прочитай. Будет у тебя табличка опкодов с длинами, а ModR/M будешь разгребать по ходу дела. В 64-битном коде все чуть веселее из-за REX. Если сложно, то на васме было "Заклинание кода", оно гуглится, правда оно только для 32 бит. Алсо, есть упоротый и гарантированно работающий способ, для которого нужно строк 30 кода от силы гугли page fault isa analysis, но он неебически медленный и поэтому почти непригоден для практического применения.> Пока пытался понять, задался следующим вопросом: Раз загрузчик может загрузить либу по любому адресу, все импорты обкладываются релокациями?Да, потому что ты на импорты ссылаешься как на данные (грубо говоря, в 32-битном коде call [imported_func] или jmp [imported_func] читают дворд по абсолютному адресу, а значит на адрес дворда нужен релок).> и при этом в импорте будут либы с одним и тем же image base, то загрузчик жидко пёрднет и умрёт?Если у либ будут релоки, загрузчик выберет для либ незанятые адреса. А вот если адрес твоей либы будет уже занят на момент загрузки, и у тебя нет релоков, тебя пошлют нахуй.> Ты предлагаешь вешать хук на вызов импортируемой функции?Я предлагаю пройтись по релокам и посмотреть, не ведут ли адреса в IAT. Если ведут - запатчить новым адресом нужного элемента в IAT (если ты их, допустим, раздвинул, чтобы свое говно воткнуть). Это нормальный, стандартный подход, и для нормальных стандартных exe, сделанных нормальными компиляторами (см. выше), а не протекторами, он работает уже третье десятилетие. Но можно и подменять вызовы импортов на свои, как ты описал.> C/C++ либу дизассемблирования с исходникамиТак capstone. И с исходниками, и поддержка любой архитектуры, которая может тебе присниться в страшном сне, и сборка лайт-версии только с нужной функциональностью.Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.
>>1170380>понадобится дизассемблер длин как минимумВзял как-то писать это для кастомного байткода, потому что меня интересовали только две инструкции из всего множества, в итоге написал всё целиком. времени потратил ахулиард.Очень интересная информация.
>>1170380>можно длинным свитчемКарта указателей на функции?
>>1170418>Как такое вообще блять гуглить?Жизненно.
>>1170459>Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.Нет, я пишу пытаюсь протектор в рамках курсовой/дипломной работы. Отсюда условия на инжектинг не в новую секцию или хвост какой нибудь, а размазать по всему коду. Отсюда же гарантии, что PE не будет упакован и обмазан другими протекторами.
>>1170859> Отсюда условия на инжектинг не в новую секцию или хвост какой нибудь, а размазать по всему коду.Побуду кэпом: защищать готовый исполняемый файл - скучно и бесполезно. Не думал взять LLVM IR и протектить его? Или хотя бы написать протектор-компоновщик для объектников? Можно попросить компилятор сделать -ffunction-sections/-Gy и тем самым значительно упростить себе жизнь.
>>1130300))))
кто-нибудь программировал на 6502? я пока копаюсь в з80, но так со стороны смотря, это же как вилкой чистить сортир, что там программировать то?может кто пояснить за, как я понял, все аргументы в инструкциях могут иметь разный тип (регистров общего назначения нет), но я не очень догнал что там да как.
>>1170459>Алсо, сдается мне, что ты малварку пилишь. Шел бы ты нахуй отсюда в таком случае.Авер в треде? Ну будет тебе, милый
А что по поводу работы в этой сфере? Выше прочитал что без опыта почти нереально что то найти, так ли это?
>>1173893Обычные пользователи, аверам наоборот выгодны вирусы.>>1174141С опытом тоже, реверсеры нахуй не нужны, кроме 3,5 мест.
>>1174297>Обычные пользователи, аверам наоборот выгодны вирусы.Аверам вирусы сами не нужны, им нужен шум вокруг них. Сами семплы они ненавидят, ибо это адский поверсшел/вбс/джс. Типичному аверу никогда не доверят серьезный анализ, за них это делает, как правило, чел из другой конторы, который по договоренности оказывает свои услуги ав конторе, в которой он сам не работает и никогда не согласится работать.
>>1174613Это же антивирус Кашпировского? От которого можно воду в банках заряжать?
>>1174638ага http://avksdie.narod.ru/кст чел, что пикчу кидал - жутко хуесосил эту контору, говорил, что сам из команды исследования сложных угроз
Анон, а что почитать до RE4B? Потому что я начал и уже начинаю плавать в понятиях и мало что понимать. Где там по хардкору про регистры, стеки и проч. Танненбаума читал года 4 назад, немного знаю Си. Нужно что-то покороче. Книга по какому-нибудь AT&T асму пойдёт?
>>1175091Хуй знает, там все вроде доступно. Можешь тут спрашивать что-нибудь конкретное, мы поясним. AT&T не нужен, это лучший способ запутаться.
>>1175091КалашниковаПоймешь основы
Что в виндах находится в памяти процесса до image base? Сейчас наткнулся на TEB и PEB под FS, который гораздо раньше IB. Чё там еще интересного есть?
>>1176346> Что в виндах находится в памяти процесса до image baseА вы запустите отладчик и посмотрите memory map, так будет лучше с точки зрения практического обученияВся память делится на регионы, которые состоят из страниц с одинаковыми атрибутами доступа. Выше / ниже модуля находятся другие модули, паддинги и тд
Репост из ньюфаг-треда:Как прицепить отладчик к программе, которая через системный шелл вызывается в другой программе? Пока ничего кроме int 3h на OEP не придумал. Может, есть что-то элегантнее?
>>1176779Создаешь ключик HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Program.exe. Втыкаешь туда значение типа REG_SZ Debugger="путь к отладчику (с опциями, если нужно)". После этого каким бы образом ты не запускал программу, она будет попадать в указанный отладчик. Достаточно элегантно? То же самое делается мышкой через gflags.exe из Debug Tools for Windows, вкладка Image File.
>>1176875Максимально элегантно в моем случае. Спасибо! Все подобрать кейворды к Гуглу не мог.И не OEP, а просто EP, конечно. Сами понимаете, откуда такая деформация.
>>1176875>>1176878Там, вроде, Debug Tools от Windows 7 и выше. Не знаешь, часом, че там для XP виртуалка для всех интересных дел?Или даже нахер это все, мне через реестр проще.Вот это вот «Program.exe» указывать абсолютным путем или хватит просто названия исполняемого файла? Экзешник в PATH (или как это на Windows называется? Короче, из cmd запускается просто как file.exe).
>>1176779Бряку на CreatePeocess и ставь флаг CREATE_SUSPENDED
>>1176948А если ShellExecute?
Как мне в ollydbg отследить обработку текста, введенного в поле ключа? То, что нашел в интернете - это например делать условный ВР с проверкой на хэндл моего текстового окна на вызов GetWindowTextA/W из user32.dll. Но только чё то бряки не триггерятся. Я тут еще подумал, раз я ввёл тот или иной текст, он должен быть в памяти процесса. Как мне поставить условный БП на чтение памяти, если в ней такая то строка?
>>1176966На чем написано приложение?> Как мне поставить условный БП на чтение памяти, если в ней такая то строка?Никак.
>>1176969Если верить PEiD, то msvc++ 6.0. Я параллельно читаю книгу Касперски искусство дизассемблирования и наткнулся на утверждение, что ввод в общем то могут на каждый WM_KEYDOWN/WM_KEYUP шифровать и как таковой у меня целиком строки в памяти и не будет
>>1176881> абсолютным путем или хватит просто названияНасколько я помню, работает и так, и так. Сам пишу просто имя, потому что писать быстрее.> Не знаешь, часом, че там для XPhttps://transfer.sh/Hr2Op/Debugging%20Tools%20for%20Windows%20%28PSDK%202003%20R2%29.msi если доверяешь или качни Platform SDK от 2003, из которого они взяты.>>1176966> отследить обработку текста, введенного в поле ключаМожет там кастомный обработчик WM_GETTEXT? Может там GetDlgItemText?> Как мне поставить условный БП на чтение памятиЗависит от отладчика. Можешь поставить условный брейкпоинт, ловить его скриптом/плагином, проверять на наличие строки и продолжать дальше, если строки нет.
>>1176949>ShellExecuteДядя, а ты не знал, что она является оберткой над CreateProcess, которая в свою очередь вызывает RtlCreateUserProcess, а та - NtCreateProcess
>>1177352Ты предлагаешь ему написать что-то, что поставит system-wide бряк на CreateProcess? И ты считаешь, что это проще, чем прописывание int3 по EP целевого бинаря, я правильно понял?
Почаны, сильно не бейте. Я дикая ньюфажина. Вкатываюсь в годноту потихоньку. Сижу с дебиана x86_64Почему оно сегфолтится, хоть и пишет в вывод hello?.section .datafoo: .string "hello" .set foo_length, . - foo -1.section .text.globl _start_start: mov $1, %rax mov $1, %rdi mov $foo_length, %rdx mov $foo, %rsi syscallИзбейте ссаными тряпками, но плохо пока что понимание даётся. Мне бы на пальцах всё объяснить. Можно и на среднем.
>>1177595>сегфолтитсявот мне тоже интересно, хотя у меня прост руки не оттуда растут небосьмимо другой ньюфак
>>1177595Может ты строку не терминировал
Не запускается IDA, вот что появляется при запуске.Как исправить?
>>1176346А есть годная статья по PEB,TEB PS ? ЧТо это такое и нахуй это надо
>>1177595Сегфолтится, потому что после вывода строки продолжает выполнять содержимое памяти, потому что завершить программу или хотя бы зациклить ее ты забыл.>>1177645Вернул мне мой 2005й (но хуй вспомню, как фиксилось). Купи иду поновее (это в пятерке же?), включи английскую раскладку клавиатуры по умолчанию.>>1177661> нахуй это надо Если не знаешь, то и нахуй не надо. В TEB лежат данные потока, в PEB данные процесса. В TEB чаще всего ебут TIB, в котором лежат обработчики исключений, ну и TLS еще. В PEB самое нужное - база данных лоадера исполняемых модулей - можно писать свои загрузчики в обход системного или свои движки импорта, ну и т. д. Более-менее годная статья называется "исходники двухтысячной винды или wrk", что-то можно у Руссиновича в книге почерпнуть (там целая ебаная глава!).
>>1177606>>1177893Огромная благодарность, аноны. Благодаря сну, вашим наставлениям и свежему взгляду всё заработало и перестало сегфоултится. И впрямь, нужно было просто вызвать sys_exit. Ооо... Это потрясающее чувство, когда всё компилируется, как надо. Благодарю. Продолжу вникать в удивительный мир ассемблеров.
Как писать базонезависимый код на C/C++? Не просто чтоб релокаций не было, а чтобы образ мог загрузиться по любому адресу, но перемещаемых элементов бы в нем не было? Чего нужно избегать и чего нужно придерживаться? Данных нет, либо они в стеке. Импортируемых функций тоже нет.
>>1177903неистово мультиплицирую
>>1177918Базонезависимость как таковая не нужна. Хотя труда большого это не составит: обычно компилятор использует jmp/call near, те нашу дельту по сути. Таким образом остается отбиться от обращений по конкретным адресам, ну и по мелочи пофиксить.
Господи, как обидно. Проебал все скиллы (последний раз в Иде плотно сидел лет пять назад, когда последний год школьником был), не могу алгоритм генерации ключа даже тупо найти в бинарнике на 700 КБ. Да даже если бы и нашел, вряд ли бы смог что-то сделать, очень уж глубоко заново погружаться в это надо будет. Всем добра в треде.
>>1179501Я хочу целиком отреверсить группу экзешников суммарно примерно 700 кб как раз. До сих пор не взялся.
>>1179513700 кб прилично, особенно, если математика есть, начни с чего попроще
>>1182100Слишком дохуя, а откуда начинать - не совсем ясно.То есть, если я ловлю какой-то интересующий меян кусочек брейкпоинтом, то с поправкой на ветер понимаю, что происходит, что вычисляется. А общая картина с кучей сисколов и хардварных обращений всё равно от меня уходит.
>>1126092 (OP)> ASM & Reverse engineeringА за это вообще платят? Работу реально найти?
>>1184432Нет, и не мечтай.
Есть ли годные статьи про то, как писать загрузчики?
>>1185095Почитай, как написать MBR-локер
Кстати, это еще актуально?CreateFile('\\.\PhysicalDrive0',GENERIC_WRITE,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
>>1185108Запись в MBR-раздел не требует повышения привилегий?
>>1185105Окей, спасибо. А какими ассемблерами вы тут пользуетесь?
>>1185110Можно скинуть нужный EXEшник в папку system32, переименовать в sethc.exe этлт файл, сэмулировать нажатие 4 раз шифта и все.
>>1185134Без прав админа в system32 писать не дадут.
>>1177999Мог бы обратиться к данным через дельта-смещение для большей труевости.
>>1185150Тогда может вписать в системный процесс вроде explorer.exe?
>>1185166Просто берёшь и запускаешь от админа. А если ты пишешь вирус, то шёл бы ты нахуй отсюда.
>>1185236Не пишу, но что в этом плохого? Это в познавательных целях полезно же.
>>1185264В познавательных докапывайся до всего сам.
>>1185343А ты познавательно иди нахуй, выродок.
Засунуть переменную в стек можно только из регистра?
>>1186360Нет, можно из памяти или даже из самого стека.push dword[0x12345678]push dword[eax]push dword[esp+0x08]И даже:sub esp, 4mov dword [esp], 0xdeadbeefИ даже:sub esp,0x100mov eax,espinvoke memcpy,eax,somedata,0x100
>>1185236> А если ты пишешь вирус, то шёл бы ты нахуй отсюда.Ты че, еба? Петушок из ав энтерпрайза?
>>1186566Согласен. Вирусы - это стиль.
>>1186566Да он питуз. Если система предоставляет возможности для унижения юзверей, почему бы этим не воспользоваться? Если посреди поля ты найдешь тысячу рублей, ты заберешь ее себе или отнесешь в милицию?
>>1186711>>1186657Сразу видно, что вы зелень. Малваре == мани. Ни больше, ни меньше. Лично я блэком не занимаюсь, но мне понятно мышление коллег по цеху. Те, что кричат что-то про идеологию версусов - идиоты. Сейчас все высокие поделки делаются исключительно за деньги и исключительно таргетированно.
>>1186747>Малваре == маниУже давно это так, согласен.Те времена прошли и забылись.Печаль.
>>1186747кст стоит добавить, что создание верусов крайне развивает твой скилл, ибо это так или иначе андоки и внутренности// пс, любой не пес в ав конторе имеет блэк бэкенд. Пруфы затеряны в анналах архивов некоторых сайтиков нулевых годов.
>>1186566Я обычный пользователь, которому даром не нужны ни вирусы, ни антивирусы, базы которых из-за вирусописателей бесконечно пухнут.
>>1126092 (OP)Можно ли проект писаный на делфи билдере вернуть в делфи билдер?
>>1187251лол
>>1187531Так ведь можно. IDA/IDR, от месяца до полугода жизни, и все вернется в исходники своя.
>>1187907Я просто с постановки вопроса охуел.
>>1187907Но почему так долго и почему руками?!Ведь это не шифрование. Это перевод с одного языка на другой. Сложные команды в простые. Почему нет автоматического переводчика из простых команд в сложные? К тому же - есть куча разработок периода 98-10, которые никто повторять не собирается, но они нужны на индастриале как воздух. Неужели никто не заинтересован в создании универсального вскрывателя да хотя бы для того же борланда. ТАм же тьма тьмущая проектов писано.
>>1188363Было такое, для вижуал васика делали, ну и где сейчас те поделки? Упростив копание в говне мамонта, ты отнимаешь краюху хлеба у мяса из бодишопа. А так - да, технологии позволяют так восстановить исходник, что он после компиляции байт в байт совпадёт. Но это нужно садиться и год дрочить разные версии билдеров-хуилдеров. Тем, кто осилит декомпиляцию, этот сизифов труд неинтересен.
>>1188368>>1188363Врываюсь в тред и ссу вам на лица. Компиляция необратима. И точка. Вы просто совсем блядь зелень.Это как по хэшу искать искомую строку (ну почти, у мну есть пример лучше, но вы его не поймете).
>>1188370Автоматика существует, есть годные энтерпрайз двиги, которые неплохо сворачивают весь мусор, но однозначно получить исходники незя, это вам не шарп
>>1188370Просто ты недозрел ещё до таких дел, ну так это пройдёт, как и твой энурез с влажными фантазиями. В начале 00х были полноценные декомпиляторы для васика и жавы - потому что сами компиляторы были таким дном, что можно было легко выявить дюжину шаблонов и конечным автоматом переводить байт-код обратно в сорцы. То, что у борланда выдаётся за оптимизатор, в гцц называется -O0, так что он от байт-кода недалеко ушел. Потеряется только всякая требуха типа имен и комментов, да и то не всегда, а когда нет отладочных символов. Алгоритмы в своё время вытаскивались на раз.
>>1188368> для вижуал васика делалиНикуда не делось: vb-decompiler.org Но оно далеко не все восстанавливает, и это не всегда читабельно, и это для Visual Basic, который на каждый чих дергает рантайм.>>1188370Двачую этого. Только не совсем так: компиляция в общем случае необратима. Есть частные случаи, и для них есть решения от совсем ручных до полуавтоматических. И да, можно сравнить с поиском прообраза хэша: так же, как тебя устроит любая коллизия, тебе не нужен изначальный код, тебя устроит любой код, который будет давать то же наблюдаемое поведение. Но все равно все очень плохо.>>1188372> есть годные энтерпрайз двигиОй, надеюсь, ты не про авастовское говно, которое они тут недавно зарелизили?>>1188374> Алгоритмы в своё время вытаскивались на раз. Они и сейчас вытаскиваются. Проблема в том, что сейчас все чаще нужны не алгоримты, а, допустим, подробная документация по взаимодействию с железкой, когда на входе у тебя только даташит со шлаком от маркетологов и ебаный бинарь размером метров 40. А внутри китайцы в очередной раз изобрели ОС.
В WinAPI есть какой нибудь макрос для маппинга поля characteristics у IMAGE_SECTION_HEADER к параметру защиты страницы flProtect, который передается в VirtualProtect? А то чё то у характеристики возможна комбинация нескольких значений, а в page protection только один можно выбрать. Лень пилить 24 if'а
>>1189312Макроса нет, сделай табличку. Там 3 ебаных бита, 8 комбинаций, руки не отвалятся.
>>1189339А что делать с IMAGE_SCN_MEM_SHARED?
>>1189392Оно работает через такую жопу, что проще игнорировать его, чем заставить работать нормально в современной ОС с ASLR, даже еще и с кастомным загрузчиком PE, который ты, видимо, пилишь.
Что почитать не сильно длинно, чтоб писать на x86? Накатил nasm, написал hello world по примеру, но структурированных знаний не хватает, то у меня стек miss-aligned, то ещё что-то.
Всем привет, вопрос про написание простейшего драйвера для винды.Мне по учебе в вузике нужно написать драйвер для Windows, который будете иметь возможность:1) получать/отправлять значение от консольного приложения в user mode2) записывать/считывать значение в MSR регистры процессораДля Линукс написание такого драйвера (модуля ядра) проблем у меня не вызвало. С Windows всё сложнее, не могу разобраться в сэмплах на сайте майкрософта, книги по драйверописанию уже устарели. Короче, спасите, умираю.Посоветуйте инфы, чтобы разобраться.А ещё лучше, напишите драйвер за меня (у шарящего человека это и 30 минут не займет), а я 1500р перешлю за работу на карту.Или посоветуйте, где за деньги можно попросить такое сделать, потому что на Workzilla и Fl.ru за 1500 рублей никто не нашёлся
>>11902181) DeviceIoControl из юзермода. В кернелмоде DriverEntry + обработчики irp. Вот простенький курс blagin.ru/sozdanie-drajverov-chast-4-obmen-dannymi/2) RDMSR/WRMSR + интел мануал
>>1190218А че за вузик если не секрет? Какая кафедра/факультет, какой курс// не товарищ майор, интересуюсь, где же в наш 2к18 с досом не работают, а все же пилят че-то более менее
>>1190170на васме есть все (wasm.in)
>>1190747.in - это уже не васм.
Анончики, а есть ли какие-нибудь гуиды по реверсу железок?Я имею ввиду совсем для даунов , хотя бы ориентиры что знать, типо схемотеники
>>1191150Посмотри выступления с конфочек, и будешь примерно представлять, что читать. Типа такого: https://www.youtube.com/watch?v=fWqBmmPQP40
подписался
Пишу на ассемблере и С, в заголовочном файле declared функции, там же есть структура с указателями на эти функции (в различных комбинациях). Предполагается, что пользователь будет обращаться к некоторой структуре, которая будет вызывать нужные функции по "правильным" для пользователя указателям (могут быть разные варианты "одной и той же на вид" функции). Но при этом ему ничего не мешает просто дергать все эти функции, минуя мою инкапсуляцию. Если их сделать static, то компилятор ожидает дефайны и сыплет ворнингами, а дефайнов нет, так как асм компилится в отдельный объектник.
>>1191537Извините, промахнулся тредом.
Кто может написать trainer для простенькой игры на Дельфи-5?
Антоны, допустим я патч сделал и мне нужен патчер для дистрибьюта, помню юзал какой-то де факто стандартный, но забыл название, подскажите.
>>1191566Все могут.>>1191583Их тысячи.
>>1191713у меня не получалось понять как хранятся данные. банальным АртМани нужное значение получить не удалось. Спать не мог одно время, как оно меня бесило
>>1191753Так тащи игру-то.
>>1191755rgho.st/7l78Gr8Mmспасибо, я думал хуями обложат как это принято
>>1191758Еще не поздно.
>>1191713О, спасибо
>>1191758Деньги (и, вроде бы, цены тоже) в 64-битных интах, в сотых долях копеек (т.е., в 10000-х долях того, что отображается): наличных 1234 -> 1234 * 10000 -> 12340000 -> 0000000000bc4b20 -> 20 4b bc 00 00 00 00 00. Ковыряться лень, игру не осилил, сложно.
>>1191807деньги не могу найти где
>>1191812Я же тебе расписал специально. Умножаешь, переводишь хексы, хексы задом наперед (little endian у нас), байтики ищешь (в том же OllyDbg View->Memory, правой кнопкой, Search, байтики, Entire block, Case sensitive или прямо инт после умножения в каком-нибудь Cheat Engine). Судя по адресам, оно где-то в куче.
В 32-битном фасме, в строке edit получаю числа функцией GetDlgItemText, как их конвертировать в hex? Допустим пишу 46, они в памяти как 34 и 36, как сделать чтобы число 46 сохранялось в памяти как 0х46?
>>1191816там похоже что шифруется каким-то образом. не открыто лежит же
>>1191859Готового ничего в Windows API нет, но можешь из msvcrt.dll дернуть strtol. Или парси вручую. Обнуляешь какой-нибудь регистр. Берешь очередную шестандцатеричную цифру, преобразуешь ее в 4-битное значение (0..15) из '0'..'9' в 0..9, а 'a'..'f' и 'A'..'F' в 10..15 (cmp, sub, можно xlat и табличку). Если встретится не шестнадцатеричная цифра - обрабатываешь ошибку. Получив цифру, сдвигаешь свой регистр влево на 4 бита (shl) и кладешь в освободившиеся биты (or, add - похуй) свою цифру. Повторяешь, пока не кончится полученная строка или не встретится невалидный символ.>>1191874Блять, а 64-битные числа и десятитысячные доли я, наверное, сам придумал. Все открыто лежит, просто не в тех единицах, что отображается. Более того, в каком-нибудь cheat engine с помощью поиска по increased/descreased ты бы и сам все это быстро нашел, ничего не зная и безо всяких IDR и отладчиков.
>>1191890>Готового ничего в Windows API нетСпасибо, придётся вручную.
>>1191890нет, я искал и ни раз
WinAPI'шный LoadLibrary сам определяет системную .dll какой разрядности подгрузить при вызове? Вот например, компилируя под х86 я был уверен, что вызов LoadLibraryA("kernel32.dll") вернет мне хэндл на 32 разрядную либу, а если я компилируюсь под x64? LoadLibrary сам узнает какую версию мне надо? Могу ли я повлиять на версию, если вот вдруг мне захотелось 32 битный kernel32 в своём 64 битном процессе?
>>1192046За версию либы отвечает WOW64, который подгружает 32-битную библиотеку длоя 32 битных приложений.> если вот вдруг мне захотелось 32 битный kernel32 в своём 64 битном процессе? То однозначно лососнешь тунца. 32-битные либы к 64-битному приложению подключать нельзя.
>>1192072>32-битные либы к 64-битному приложению подключать нельзя.вот тут вы не правыпо меньшей мере ручками можно впихнуть, затем свапаемся на x32 и погнали
>>1192471>затем свапаемся на x32 и погналиКак ты себе это представляешь? Проц переключать может только ОС,указатели, структуры и прочую поеботу нужно конвертировать и так далее. Не знаю как в люнупсах, но винда проксирует только очевидные ядерные вызовы, все остальные либы тупо скомпилированы в двух версиях, и разделяют лишь ресурсы.
Я тут стаб для распаковщика PE по гайдам на C/C++ пишу, и у меня возник вопрос. Почему компилятор vc++ не генерирует релокации, если в коде есть вызовы функций? Насколько я понимаю, Вызов функции сопровождается тем, что в стек кладется адрес следующей инструкции EIP + адрес call' а с оператором?, на который в конце вызванной функции под RET'ом делается JMP. Тут ведь получается JMP по VA, а не RVA, а релоков нет. Я чёт не понимаю, или так бывает?
>>1192652EIP + размер call' а с оператором, епту.самофикс
>>1192652Хотя чё то сам посидел подумал над своим вопросом. Раз адрес возврата в стеке, то без разницы, какой будет image base, так? Собсна поэтому и релокации не нужны для вызовов функций?
>>1192676Адрес возврата в стек толкает процессор, он абсолютный адрес всегда знает. А релокации для jmp/call не нужны именно потому, что они ip-relative, а ip процессор опять же знает.
Есть структура с данными на сишечке, есть указатель на эту структуру. Указатель передается в функцию на асме, где я использую movdqa. Но происходит unaligned memory access и segfault. Приходится использовать movdqu, но это медленнее. Как быть?
>>1194029Сейчас перепроверил указатели, обнаружил 16-bit alignment. А мне нужно 32 для vmovdqa.
>>1194029>Как быть? Гугли директивы своего компилятора если обьявляешь статически (__declspec(align(#)) у мокрософта/__attribute__((aligned(#))) на прыщах и шланге)/используй _mm_malloc с выравниванием, если выделяешь динамически.
>>1194116>__attribute__((aligned(#)))Спасибо, работает. Насколько это плохо? Непортабельно же.
>>1194144C11, stdalign.h, alignas.
>>1194189Ахда, и aligned_alloc, если выделяешь динамически.
>>1194189>>1194190Круто, спасибо.
>>1159811int 29h выводит символ из AL на экран (в текстмоде)>>1159683>а вот как записать восьмеричное число не могуКуда записать? Какой ебаквак писал этот код Куда проёбаны метки (loop)?
Что такое carry-less multiplcation?Что там куда не переностися, если результат умножения двух 64-битных чисел всё равно 128 бит.
Сап, анон. Погугли за меня плес. И сильно не ругайся. Может ссылку правильную покажешь, где всё нормально объясняется. Я решительно не понимаю и не могу понять одну важную вещь на x86_64. Требуется подсчитать циферки в числе. Как работает div/idiv и заодно mul/imul не могу уловить. Вот у меня в rbx ложится 10, в rax, допустим, 47, в rdx 5. Делаю div rbx и вроде работает. В rdx остаётся 7. В rbx лежит 10, а вот в rax вообще какая-то дикая хрень получается. Дбгер каждый раз в rax показывает разные значения. Как работает div?
>>1197264div с 64-битным регистром делит 128-битную пару rdx:rax на этот регистр, кладет частное в rax, остаток в rdx. Если частное не влезает в rax, происходит печалька. 0x5000000000000002f / 0x0a = 0x8000000000000004, остаток 0x07. Покажи скриншот отладчика. Уверен, что ничего не портишь после деления?
>>1197293Спасибо огромное, тебе. Помог разобраться. У меня ведь и впрямь до этого в rdx всякая хрень лежала. Ну, если грубо говоря, как на одном из пиков, где адын в rdx. Я отдельным модулём проверяю работоспособность, потом буду это вписывать в нужный код. Везде про какие-то расширения регистров пишут и сужения странные. А так нормально вроде. Сейчас сяду писать счётчик цифер. Спасибо, ещё раз.
Заебись?
>>1198102Настоящий какер. А оно мигает? Оно обязательно должно мигать.
>>1198123Ты никогда Ольку что ли не видел, залетыш? Байткод, дизасм, регистры, стек, дамп памяти, ничего лишнего же. Пиздец, я натурально хуею с местной публики.
>>1198102это десктоп тред?
>>1198102>>1198321Накуя вам хекс-дампы? Вы же всё равно нихуя в них не поймёте.
>>1198643цы, стандартный интерфейс олли же. + помогает в отладке, чтобы проверить, что в памяти то, что должно быть.
>>1198321да
>>1198720Вот вроде и морду к радару прилепили, а он как был уебищным консольным говном, так и остался.
Хочу угореть по написанию ОС с нуля. То есть совсем, даже без опенсоусного ядра. Ни для чего конкретного, для общего развития просто пройти исторической дорогой эволюционирования ОС: загрузчик, шины, драйвера, файловая система, UI, и всё остальное необходимое. Мануалы уже накачал, остаётся вопрос по физической тестовой среде. В немногих обсуждениях по сабжу, которые я сумел найти, настойчиво упоминается Raspberry, но мне всё-таки хотелось бы на чём-нибудь Интеловском начать. И непременно всё на языке ассемблера. Как я понимаю, если я захочу запилить исполняемый файл на машинном коде, не подходящий ни под одну широко распространённую операционную систему, мне придётся писать свой собственный ассемблер и ломать глаза об многотонные талмуды уровня "Intel® 64 and IA-32 Architectures Software Developer’s Manual"?
>>1198980Мне кстати гуй не нравиться, неудобный пиздец, ебучие макаки со своим qt, фрон тэед на gtk был лучше в сто раз, но он умер. Перекатился обратно в соснолечку, мне не привыкать
>>1198992Из ассемблеров бери fasm, на нем целая колибри и пара операционок подохлее написано. Талмуды от интела кстати неплохие, но только как справочники юзать. Их раньше даже в бумаге присылали совершенно бесплатно, но я при переезде проебал где то. А жаль, сейчас бы не отказался бумажную копию заиметь.И вообще кури https://wiki.osdev.org/
>>1199002>https://wiki.osdev.org/Вот за это вообще адовое спасибо. Не думал, что даже про такие основы могут быть какие-то вики.Может и про электротехнические основы приёмо-передающих устройств есть своя вики? Типа, "как создать свою собственную амплитудно-частотную систему кодирования и разработать сигнальные созвездия с нуля"?
>>1198992> настойчиво упоминается Raspberry, но мне всё-таки хотелось бы на чём-нибудь Интеловском начатьНе зря упоминается (хотя конкретно Raspberry - то еще днище с неполноценной документацией). Пол ARM bare-metal писать... ну не проще, но хотя бы логичнее, гораздо меньше всякого ненужного легаси из 80х.> И непременно всё на языке ассемблера. Категорически не рекомендую. Потратишь время на пердолинг в ассемблер вместо собственно создания ОС. А так, бутлоадер написал, обвязку всякую, для которой интринсиков нет, и вперед, хуячить на сишечке.
>>1198992Чё мелочиться с ОС? Ебашь сразу свой ИИ!
>>1199238Ну написать ОС, хоть и довольно примитивную реально, а вот ИИ нет.хотя судя по его вопросам он не представляет размер трудностей
>>1199142>Пол ARM bare-metal писать... ну не проще, но хотя бы логичнее, гораздо меньше всякого ненужного легаси из 80х.И то не сказал бы, бойлерплейт "запусти все режимы выполнения arm v8, чтобы и с гипервизором и с режимом "анальный огрод"" примерно такой же как real->protected->long выходит.
>>1199142Вот кстати, анончик, объясни мне, на OSdev читаю про "войти в long mode": lea eax, [es:di + 0x1000] ; пихают адрес es:di +1000 будущей директории в запись PML4 or eax, PAGE_PRESENT | PAGE_WRITE ; хуярят туда же флаги для этой записи mov [es:di], eax ; сохраняют запись А потом поинтересовался какой же формат у этой записи, и вижу пикрелейтед.Где видно что адрес располагается в битах с 11 по 31, а они просто его хуйнули без всяких сдвигов.Это что за уличная магия такая? Или это little endian так работает, что mov 00000000, FFFF = FFFF0000?
>>1199430>Или это little endian так работаетКажется так.другой анон
>>1199430Нет, little endian тут не при чем. Вот тебе же написали:> 4 kb aligned addressРаз адрес всегд выровнен на 4K (212), значит в его младших 12 битах всегда нули. А раз там нули, то их можно как угодно абузить под флаги - железу это не помешает прочитать адрес с нулями и флаги отдельно.
>>1199002>https://wiki.osdev.orgдругойанонспасибо за годноту. Сам бы не смог найти.
>>1199238>>1199400Ну не стукайте. Я же не новую Фряху-Линукс-Болдженос буду писать. Самую наипростейшую ОС, просто из научного интереса.К тому, все возможные ниши уже заняты, ящитаю.
>>1199790> все возможные ниши уже занятыНаоборот ниши освобождаются: Windows следит за тобой, жрет память и обновляется без спроса, от релиза к релизу становясь все хуже, Android следит за тобой, садит батарейку и на многих девайсах не получает даже секьюрити-апдейтов, про iOS и политику Apple можно только молчать. Мир замер в ожидании принципиально новой ОС.
>>1199812И тут люнупс захватывает мир.
>>1199837Как что то плохое
>>1199864Это в качестве шутки было. Впрочем, не думаю, что осесрач тут будет уместен, так что закончим на позитивной ноте "Все ОС говно".
>>1199812>Мир замер в ожидании принципиально новой ОС.Нуок, готовьтесь к пришествию AnoOS.
>>1199487Это понятно.Я про то что [es:di + 0x1000] - 16 разрядное число и lea eax, [es:di + 0x1000] должно по идее в младшие биты идти, а оно без каких либо телодвижений в старщие пиздует?
>>1199487А, блядь, все, понял. Получается, в записи адрес равен 1 (0x1000 - это как раз 12 нулей и тринадцатая 1 ), а хуйня под флаги -нули. Вот я бака. Спасибо, сажа-кун.
>>1200398Стоит дополнить, что там >>1200397 eax = es:di + 0x1000 фактически означает di + 0x1000 (на es lea абсолютно похуй).
Поясните за такой пролог в main:push ebxmov ebx, espsub esp, 8Что это за хуйня?
>>1200422выделяет в стековом кадре 8 байт под переменные
>>1200426Не, это я знаю, мне интересно схуяли там ebx если в стандартном прологе ebp.
>>1200427хз, в 32+ битных ОС регистры используются как регистры общего назначения, а не как в 16 битных досах с ограничениями. предположу, что некоторые компиляторы из исторических соображений используют ebp для этих целей, но по факту используй какой хочешь кроме esp и eip
>>1200427>если в стандартном прологе ebp. Каком еще стандартном прологе? Стандартным является ABI - что компилятор обязуется передавать в определенных регистрах и возвращать результат в определенных регистрах. В остальном компилятор дрочит так как ему больше нравится.
>>1200431>>1200439Окей, это я понял.Только вот похоже тот сниппет выше был нихуя не весь пролог. Судя по всему вот он:push ebxmov ebx, espsub esp, 8and esp, -16add esp, 4push ebpmov ebp, [ebx+4]mov [esp+4], ebpmov ebp, espsub esp, 84hИ у меня всё тот же вопрос - нахуя?
>>1200448кык. чёт хуйня какая то. что за компилятор? может быть, это обфускация, а может это неудачная попытка оптимизации по скорости или по размеру
>>1197293>Если частное не влезает в rax, происходит печалька.Заебись.
>>1200503Короче там какой-то крипт, ибо кроме main там весь .text - недекомпилируемое месиво.
Функция LocalAlloc как я понял выделяет максимум 0xFFFF - 64Кб. А мне нужно 640Кб, что делать?
>>1201216Понял уже что лажанул, наверно надо HeapAlloc использовать. Я только учусь. Пишу hex-поисковик, который будет искать hex-строку с пропуском любого кол-ва байт и записывать смещения в файлик. Точнее, уже написал, только функция ReadFile читает по одному байту из файла и поиск в файле 85Mb занимает около двух минут, значит в файле 850Mb поиск будет 20 мин. Это из-за того что чтение по одному байту?(наверно) Вот и решил увеличить буфер для чтения. Но сколько его сделать? Какой оптимальный буфер?
>>1201216Неправильно понял. Выделяет, сколько попросишь. Алсо, оно почти не содержит магии, просто обертка над обычной кучей для совместимости.>>1201304> ReadFile читает по одному байту из файлаДа, каждый ReadFile - это поход в ядро через несколько презервативов, поэтому и медленно.Осиль memory-mapped IO (CreateFile/CreateFileMapping/MapViewOfFile), отображай по паре сотен метров за раз (ну или больше даже, если у тебя x86-64), пусть система ебется с чтением файла, а ты ищи свои байты.
>>1198643> Вы же всё равно нихуя в них не поймёте. > на скринах >>1198102 хеллоу во...Да мы вообще нихуя в олли не понимаем, но зато одноклассники называют нас хакирами.
>>1202400Не надо грязи. Функция GetWindowTextLength в Хеллоуворлде без надобности.
>>1201304> Какой оптимальный буфер?Размером с кластер файловой системы, поскольку именно столько за раз ось и считывет. Все это гуглится на раз.
>>1200510Блять, проверил, действителньо печалька происходит. Могли бы сделать сохранение верхней части результата и не падать, блять. Хотя да, бесполезно. Придётся ебаться с нормализацией.
>>1202491Ось-то считывает, только ты можешь у ядра попросить 64к за раз, а можешь мегабайт за раз. И потратишь на это в обоих случаях один сисколл.
Готово! Первая прога на асме. Сделалinvoke CreateFileMapping, eax, 0, PAGE_READONLY, 0, 0, 0 invoke MapViewOfFile, [hMapFile], FILE_MAP_READ, 0, 0, 0 Вроде норм, на видео поиск по файлу 800Мб.
>>1203002Сука, ты специально так медленно тайпал?
>>1203120>тайпал>тайпал>тайпал>тайпал>тайпалПиздец, подвороты своим новоязом уже эмигрантов с брайтона переплевывают.
>>1202491Про опережающее чтение не слышал?
>>1203120Да не, наоборот пытался быстрее, чтобы размер видео был меньше, спать хотел, ещё поле ввода табом не переключается, хотел как лучше а получилось..Ща обработчики ошибок доделаю и скину програмку.
>>1203125Да чё ты, мэн, нормально же токили, обычный вопросик аскнул, а ты завёлся. Чиллься.
>>1203126Ты кусок ебаного дебила, чтение в любом случае идет блоками, кластерами. Хоть опережающее, хоть опаздывающее, как у тебя.>>1203125Говна въеби, шалава малолетняя. Учить она еще меня будет как на двощах общаться.>>1203134Научись слепой печати, это не долго (хоть и не оче приятно первые 2-3 месяца) и сильно повысит качество твоей жизни.
>>1202491В моём случае лучше через файл маппинг, потому что ещё есть "проблема пограничного значения", это если я ищу строку 12345678 и 1234 в конце текущего блока, а 5678 в начале нового блока, это тоже обрабатывать надо, а это пипец. Если прога совсем низкоуровневая, то да, надо кластерами, спасибо.
Проблема, помогите.После того как строка найдена, увеличиваю счётчик:mov ebx, [FoundCounter]inc ebxmov [FoundCounter], ebxпо окончанию файла конвертирую значение в ascii. Но значение то шестнадцатеричное. Как лучше сделать? Преобразовать готовое значение в десятичное(как?), или сразу как-то счётчик обрабатывать?
Как, дебажить DOS-приложения под IDA? Она предлагает использовать bochs-debugger, но когда я его запускаю, то получаю пикрелейтед.Вообще, в принципе, IDA не так уж и нужна, мне бы что угодно, способное дебажить 16-бит под форточками.
>>1203446>Как пропатчить KDE2 под FreeBSD? Ну ты фикус. TurboDebugger тебе чтоли нужен?
>>1203446debug.com
>>1203157В твоем случае есть проблема "32-битное фрагментированное адресное пространство и файл на полтора гига". Для учебной проги решение норм, а вот для реальной все равно нужно делать регионы какого-то максимального размера, и ремапить их по необходимости.>>1203413wsprintf %d или вручную делением на 10.>>1203446> что угодно, способное дебажить 16-бит под форточкамиБилд DOSBox со включенным дебаггером? Но лучше все же Turbo Debugger, который уже посоветовали.
>>1203146>чтение в любом случае идет блоками, кластерамиИ это значит, что буфер должен быть размером, кратным кластеру. А не всего с один сраный кластер, коий по дефолту 4кб.
Почему vc++ для x64 генерирует исключения, даже если в ключах всё, связанное с исключениями, отключено? Для одного и того же кода с одними и теми же настройками компиляции в х86 нет exception data directory, а в x64 - есть. В обоих конфигурациях в том числе отключены внутренние функции, дефолтные библиотеки, CFG, оптимизация, вот это всё, что приводит к генерации CRT bootstrap'а. Из #include'ов - и там и там <Windows.h>
Можно ли при распаковке образа в рантайме забить на восстановление image data directory? Загрузчик/внутренние функции могут к ним обращаться в ходе работы программы?
>>1204855Функции, которые работают с ресурсами, пойдут в ресурсы через директорию ресурсов, GetProcAddress() пойдет в экспорты (т.е., если у программы, например, плагины, и плагин-апи лежит в .exe, и ты как раз .exe распаковываешь, все сломается).
>>1204911Есть где нибудь полный список таких подводных камней, или самому догадываться придется исходя из различных возможностей ОС и процессов в ней?
>>1204911И можно ли со спокойной душой спокойно коверкать IMAGE_FILE_HEADER, IMAGE_NT_HEADER, и остальные заголовки в PE под IMAGE_BASE, если я например хочу, чтобы образ, восстановленный из дампа, не запускался без ручного восстановления? Или в винде есть какие нибудь популярные механизмы, которые в рантайме обращаются к этим заголовкам?
>>1204917>>1204923Вряд ли список найдешь где-то. Есть спека на сам PE-формат, но реальное поведение лоадера не документировано и на протяжении истории Windows менялось не раз. И не только поведение лоадера - например, в 9x Explorer хотел, чтобы ресурсы лежали в начале .rsrc, а если его не ублажить, не показывал иконку и версию в свойствах файла).> Или в винде есть какие нибудь популярные механизмыВсе те же, что и выше - чтобы добраться до DataDirectory, нужно офсеты, а офсеты как раз в этих заголовках. Возьми IDA, настрой подгрузку символов и смотри. Если DataDirectory твоей программе не нужна, можешь портить, в принципе.
Не пойму почему SendInput работает со структурой KEYBDINPUT когда указываешь размер структуры 28 байт. Там же 20. Или нет?
>>1205609Причём работает даже когда следующая структура начинается через 20 байт. Почему так?
>>1205609>>120570164-битная ОС? Там после time 4 байта для выравнивания по 8-байтовой границы, потому что ULONG_PTR 64-битный. Соответственно, получается 2 + 2 + 4 + 4 + (4) + 8 = 24, а не 28.
>>1205819Точно. Спасибо, подозревал что что-то не так с этим ULONG_PTR.
>>1205819Тогда вопрос: какой размер указывать? Если прогу запустят на 32-битной ОС?
>>1205840Тьфу затупил
>>1175091Рудакова почитай, также есть еще Пирогов по асму и дисасму, тоже пойдет.
>>1204348Да, кратному. Спасибо что уточнил.
Что означает вот эта вот хуита под последним сегментом? Это не стек.
>>1206604А, и ещё: как в FASM, в формате MZ1. Явно указать конец сегмент?2. Инициализировать сегменты один за другим, строго в том порядке, как я их указываю в листинге?
Кто нибудь знает, как из TLS-колбэка, выполняющегося до входе в OEP, повлиять на сам OEP, на который будет совершен переход после выполнения всех колбэков? Я уже пробовал в коллбэке менять в optional header'е entry point, но это не сработало. В стеке я нашёл собсна сам OEP, и если заменить его на нужный, то это сработает. Вот только я не знаю, как программно добраться до этого места в стеке например, через какие структуры. На первый взгляд кажется, что вершина стека в коллбэке и то место в стеке, где находится подложный ОЕР, никак не связаны. Или это уже внутренности винды, и это не задокументировано никем и нигде и нет никаких гарантий, что такой мухлёж сработает на любой другой винде в любом другом процессе?inb4 нахуя мне это - предполагаю, что неправильный OEP собьёт с толку дизассемблеры, делаю что то типа протектора в образовательных целях.
>>1206876mov [esp+4], eaxmov [esp+8], eaxmov [esp+12], eaxЭто?лол
>>1206903Прикалываешься?
>>1207044Возможно, не шарю в тлс-каллбэках. Как ты изменишь адрес возврата из виндовой функции в то время когда она уже выполняется? Это сторонним кодом наверно надо с переполнениями стека, а это уже будет вирус. Может попробовать сделать имитацию этой функции, сделать её частью своей проги, а уже в ней делать адреса какие захочешь.
>>1207080call = push, jmpret = pop, jmp
>>1207082>call = push, jmpОткуда это будет выполняться? Наверно из самого каллбэка этого.
>>1207084Или я короче хз. Просто предположил что функция сама положит нужный адрес entry point.
>>1207088Это так? Потому что чисто логически, если в той ячейке стека будет лежать адрес входа в функцию, то тогда call функции будет перед entry point.
>>1207080TLS коллбэк не из точки входа вызывается, он вызывается загрузчиком судя по всему, где то из ntdll, над стеком точка возврата - не ОЕР. Мне надо понять, как загрузчик после выполнения TLS коллбэков передает управление на ОЕР, или в какой структуре, управляемой загрузчиком, на момент обработки TLS, находится ОЕР
>>1207080> Как ты изменишь адрес возврата из виндовой функции в то время когда она уже выполняется?Так мой же код. (&ModuleHandle)[-1] = newReturn;
>>1207170Так в этом нет смысла. Ты же всё равно не сможешь изменить виндовский код без хакерских приёмчиков. Ну допустим, у тебя винда поместит твою прогу по одному адресу и передаст ей управление, у меня по другому адресу. (очень поверхностно себе это представляю). Ну и если ты, каким то образом умудришься указать явный энтри пойнт, то у меня будет выполняться какая-то непонятная херь и краш, бсод. Какой смысл? Или у тебя задача всё же другая?
>>1207198Хотя.. наверно можно. Будем ждать профи.>умудришься указать явный энтри пойнт, то у меня будет выполняться какая-то непонятная херь и краш, бсодЭто конечно херня. Но как сделать изменение результата функции до того как этот результат получен?
>>1207198>Какой смысл? Или у тебя задача всё же другая?еще раз, я пишу что то типа протектора/упаковщика в образовательных целях, то есть на вход мне подаётся РЕ-файл. С целью противодействия дизассемблирования мне показалось поправьте, если не прав неплохой идеей в ходе упаковки в OptionalHeader ставить кривой OEP ОЕР+const, чтобы дизассмблер поперхнулся на нем, предоставив ачкеру на обозрение какую то кашу. Но вот TLS коллбэк, написанный мной и вшитый в упакованный файл, выполняется загрузчиком да? до передачи управления ОЕР, и в нем я хотел бы проста тупа взять и ОЕР-const сделать, чтобы после TLS callback'ов управление передалось на настоящий код. Вот и вопрос, я вижу в стеке ложный OEP, считанный загрузчиком из OptionalHeader'а, но не знаю как до него добраться. Не знаю, через какие структуры к нему пролезть, РЕВ, TEB там, вот эти ребята.
Вы вот всё со своим сверхразумом. Лучше мне подскажите как менять позицию курсора в поле edit, например переместить его в конец строки, я нашёл только вариант - через sendinput отправлять клавишу End (всё равно работет только с размером 28 почемуто).
Вы правда считаете что лучше идти от сложного к простому, чем от простого к сложному?немного дзена для атмосферы
>>1207327>>1207342Дегенераты уровня /зк as is.
>>1206609ЯННП. Покажи исходник.>>1206876>>1207250Из TLS патчить в хедерах точку входа бессмысленно. Она как минимум задолго до вызова твоей TLS-функции EP кэшируется в TEB->ProcessEnvironmentBlock->Ldr->InLoadOrderModuleList->EntryPoint. Но и там ее править бесмысленно, потому что в контекст треда задолго до LdrpInitialize, еще когда тредик создавался в NtCreateUserProcess, положили эту самую EP, а RtlUserThreadStart положил ее в стек, в самое начало.> Лучше мне подскажите как менять позицию курсора в поле editЕсли права есть, то можно отправить EM_SETSEL с параметрами, равными длине текста. Но это работает только для стандартных Edit. Для рандомного поля ввода шли нажатиями.> всё равно работет только с размером 28 почемутоДокументацию читать пробовал? Размер 24 - это размер KEYBDINPUT, а посылать надо INPUT, и размер тоже для INPUT указывать, а это на 64-битной системе вообще 40, потому что там union, содержащий и другие, более длинные члены.
>>1207327>>1207401
>>1207401Насколько плохим является решение из TLS callback'а прогуляться по стеку пару 0хтысяч байт вверх и вниз в поиске VA OEP с целью отнять константу? Такие подходы практикуются вообще?
>>1207448> пару 0хтысяч байт вверхНу если уж делать так, то стоит искать весь CONTEXT целиком, проверить, что Eip/Rip там попадает на RtlUserThreadStart (в XP не экспортируется), Esp/Rsp в регион стека, а в Eax/Rax будет лежать адрес (по крайней мере, в 7 еще лежал) - так чуть-чуть понадежнее. Но гораздо надежнее похукать ZwContinue, туда прилетит готовый адрес CONTEXT аргументом, а тебе останется лишь снять хук и пропатчить Eax/Rax в контексте. Но в целом это будет не более сложно для реверсера, чем обычная расшифровка в TLS кода по EP.
>>1207401Вроде разобрался. Указывать нужно размер самой большой структуры INPUT, у меня это MOUSEINPUT, хоть я и использую KEYBDINPUT.Так как у меня программа 32-битная, то этот размер 28 байт. Но для 64бит он вроде 32 должен быть.И вообще, зачем указывать этот размер, система сама не в состоянии его определить? Дичь какая-то.
Как лучше проверить делимость числа на 3?
>>1207763То есть, счётчик увеличивается на единицу в цикле, как только он делится на три то выполняется условие. Как лучше сделать?
>>1207768К сожалению, только делением. Но ты можешь сделать два счетчика - один будет считать по единицам, а второй ты будешь на каждый третий раз сбрасывать.>>1207676> 4 байта указательПроиграл. Нет, заголовок структуры - это просто имя, содержимого структуры оно не определяет, места не занимает.> 8 байт на пикеТолько в 64-битной ОС.> Указывать нужно размер самой большой структуры INPUTЯ тебе уже писал, что указывать нужно размер INPUT, он всегда одинаковый. Да, по сути это размер dwType + размер MOUSEINPUT, потому что она самая большая.В 32-битной ОС размер INPUT: 4 байта dwType, 24 байта MOUSEINPUT (там все 6 полей по 4 байта), всего 28. Размер KEYBDINPUT: 2 ворда + 3 дворда = 16 байт. И не забывай, блять, про dwType в INPUT, он не часть union, он должен быть всегда.> И вообще, зачем указывать этот размер, система сама не в состоянии его определить?Представь, что в Windows 11 в INPUT добавляют TOUCHINPUT, и его размер больше MOUSEINPUT, из-за чего размер всей структуры INPUT меняется, и SendInput вместо второго и последующих элементов массива читает мусор. Но Microsoft позаботилась о тебе: если твоя (скомпилированная до этих изменений) программа передаст старый размер INPUT, система увидит старый размер и будет знать, что это старый формат INPUT, который умеет только в mouse/keyboard/hardware, и ничего не сломается. А новые программы, собранные с новым SDK смогут использовать добавленные возможности.
>>1207797Да причём тут ОС то ёптабля, ты мне первый раз написал про ОС, у меня сразу каша в голове>>1205840. Думаю тут всё проще: пишешь 32-битное приложение - указываешь один адрес, пишешь 64-битное указываешь другой. А компилировать и запускать можно хоть на 128битной ОС. Указатель имелся ввиду dwType, чтобы лишних скринов не делать.
>>1207823>указываешь один адресуказываешь один размерfix
Ты мне помог, спасибо. Просто немного немного критики (если это так конечно, лень проверять).
>>1207763Раздели var1 на 3, запиши результат в var2, var2 умножь на 3 и сравни с var1. Если значения равны, то число делится, иначе ты потерял точность из-за округления интов и оно не делится
>>1207836Лол, в асме попроще, там после команды div результат в eax, остаток в edx. Ну и если edx после деления 0, значит число делится. Просто ещё есть проверка на чётность, она ещё проще - test eax, 1, если результат 0 то число чётное.
>>1207823Да, извини, я имел в виду 32-/64-битные приложения, а не ОС. Алсо, я не вполне понимаю, зачем ты вручную считаешь. В Си есть sizeof, в фасме есть sizeof.имяструктуры, в масме тоже есть SIZEOF имяструктуры.
>>1207845Да я не заметил, что не в сишном треде нахожусь
>>1207910Потому что я раб асма, для меня нет больше языков программирования. Вот у меня рвотный рефлекс от этого>>1207836, а от более высокоуровневых языков тем более. Просто у меня мало мало практики, наверстаю.
>>1207915> наверстаюТуда ли ты зашел, верстальщик? Версталы в воркаче сидят.
>>1207913Тогда давай я тебе ещё пердак разогрею. Командой тест можно проверять не только чётность, но и делимость на числа степеней двойки - 2,4,8,16,32,64...
Подумал, а почему игры тормозят, ведь железо же хорошее. А им только чтобы определить делимость числа нужно 3-4 высокоуровневых команд, которые содержат в себе 5-6 команд асма. А определить делимость числа это нихуя не на один раз, простой цикл с выходом при делимости числа уже проблема, а сколько этих циклов в 4-32 Гб проге? Миллиарды? Сикстильярды?
>>1207967Вы же понимаете что такое цикл? То есть, чтобы выйти из цикла когда счётчик будет равен 512, нужно проделать 3 операции по пять асмовских команд 511 раз.Считаем, 3x5x511=7665 ненужных вычислений. НО! этот цикл то не один, а их хз сколько. Даже взять миллион, это уже 7 665 000 000 ненужных операций. И это я ещё не переводил в такты процессора.
>>1207975ОЙ блять. А выполняющаяся программа в памяти, весом в 2гб, имеющая уже скажем 200 таких циклов, будет к ним обращаться снова и снова, пока она не будет завершена. Тут счётчик вообще улетает в космос.Скажу просто - КПД 0,0001%
Почему, кстати, КПД не применяется к программам?
>>1207982Знаете почему не применяется? Догадываетесь? Потому что тогда всякие java-пограмисты станут нахуй никому не нужны. А почему так происходит? Догадываетесь? Потому что дядькам на верху нужно чтобы всё так и было.Если ты лох вафельный, изучай только асм!
>>1207986>Если ты лох вафельныйЕсли ты НЕ лох вафельныйДа похуй, правда всё равно за мной.
>>1207988>>1207986>>1207982>>1207979>>1207975>>1207967нихуя у тебя шиза
>>1207962Да не, я шарю в этом, просто закладки асм и си треда рядом, и я мисскликнул)
>>1208044(Дополнение)А вот можно ли поделить на 3 быстрее команды div интересно узнать. Мб есть какой-нибудь трюк, вроде шифта битов и прибавления числа, как при умножении k = 5, m = 73k*m = (m<<2)+m
>>1207982А анализ алгоритмов это что по-твоему?
>>1208021Да сам проигрываю чё я тут спьяну навычислял. Но доля правды в этом всё же есть: 1 будущее за робототехникой 2 Ненужные операции потребляют энергию 3 аккумулятор сейчас проблема и всегда будет проблемой
>>1208047https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%B7%D0%BD%D0%B0%D0%BA%D0%B8_%D0%B4%D0%B5%D0%BB%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8#%D0%9F%D1%80%D0%B8%D0%B7%D0%BD%D0%B0%D0%BA_%D0%B4%D0%B5%D0%BB%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BD%D0%B0_3Наверняка еврейские умы уже пытались. Но всё равно попробовать стоит, потому что ситуации бывают разные. В связи с этим вопрос: Где взять хороший справочник команд? С опкодами и циклами. Можно в шапку добавить. Помню был такой в dos-варианте.
>>1208289Ну вот что я знаю:http://ref.x86asm.net/https://www.felixcloutier.com/x86/https://ipfs.io/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki/X86_instruction_listings.html
Я вот опять выпил жизненные обстоятельства. Вы не обижайтесь на меня и не агритесь, я ни кому не советую так делать и сам не люблю это. Но вот какая штука, я целый день об этом думал - цикличность мысли. Понимаете? Ща объяснюВот, например, анончик который занимается изучением ОС(уже наверно сам понял). Зачем ему заниматься изучением велосипеда, если можно заняться изучением ОС мобильных девайсов, дизассемблировать их, убрать лишние команды и тем самым увеличить время до перезарядки девайса. Это же реально можно продать, и сделать это намного реальней чем пилить свою ОС.Может быть я тут раскрываю секреты полишенеля, но я бы трезвый к этому не пришёл бы, или пришёл бы но не скоро.
>>1208212> Ненужные операции Либо ты делаешь их явно, либо у тебя CISC, и ты все равно их делаешь, только уже в микрокоде. Потому что "ненужность" каких-то операций - это лишь твои фантазии.>>1208289> Где взять хороший справочник команд?Пишешь в гугле: Intel SDM. Второй том - справочник. С опкодами и псевдокодом каждой инструкции.
>>1208611>это лишь твои фантазииУ меня просто башню сносит. Я в своей>>1203002 проге ввёл просто ВС для поиска. Ушло около 2-х минут чтобы найти 3 100 000 с чем то совпадений.
Ну короче щас застопорился на этом делении на три. Начал делать обработчики ошибок, и в поле поиска пользователь может ввести букву К например. А это вызовет ошибку. Вобщем решил подойти творчески, с душой, и не дать пользователю сделать такую ошибку. А заодно и автоматически вставить дефисы после каждого байта, хоть вручную хоть после копипасте. Но вот дефис должен вставляться каждый третий символ. И не знаю что лучше: заранее эти дефисы понаставить, или же чтобы всё было одновременно со считыванием строки поиска.
>>1208625> Ну короче щас застопорился на этом делении на триwhile (1) {digit = get_digit();check_digit(digit);if (first_digit) {store(digit);} else {store(digit);store('-');}first_digit = !first_digit;}Где тут деление на 3? Зачем?
>>1208638Млин, ты прикалываешься? Алгоритм такой:1 при любом изменении строки edit программа прерывается на обработку;-----обработка2 создаю область памяти = столько сколько символов в строке3 создаю вторую область памяти4 записываю изменённые значения из первой области во вторую5 выдаю в строку edit вторую область памятиИ как мне быть? Сразу записать во вторую область дефисы, или же это делать одновременно со считыванием данных из первой области памяти?
>>1208654Ну ясно-понятно что вторую область создаю размером уже с учётом дефисов(это легко).
>>1208654При чём, при таком алгоритме ещё нужно чтобы сами дефисы были прогой распознаны и вставлялись во второй раз.
>>1208660>и вставлялись во второй раз.и НЕ вставлялись во второй раз.Кто всегда удаляет эту частицу?
Тут нужен интеллект, это вам не умные книжки читать.
>>1208664Меня опять несёт, сори, сори, сори...
Тащем то вариантов тут всего два:1 Считывать каждуй байт из области 1 и проверять на делимость на три, чтобы вставить дефис2 Заранее понаставить дефисов в месте: адрес второго блока памяти +3. И потом сверять каждый байт во втором блоке памяти перед копирыванием.ВОТ Я НЕ ЗНАЮ!! КАК СУКА ЛУЧШЕ СДЕЛАТЬ!
>>1208674Вот по трезвому опишу что мне нужно, без всяких этихПусть у меня в поле edit уже есть два символа 12, я ввожу третий символ. Поле edit посылает сообщение что оно изменилось. После чего создаётся два блока памяти, один размером три байта, другой рамером 4 байта(пять с завершающим нулём, но это не важно).Функцией GetDlgItemText получаю символы из поля edit в первый блок памяти, там будет три байта - 31,32,33. Теперь мне нужно сделать так чтобы во втором блоке памяти была следущая строка байт -31,32,2D,33(2D - дефис). Затем функцией SetDlgItemText посылаю в поле edit строку байт из второго блока памяти. Уничтожаю блоки памяти.Ещё есть тонкость в том, что когда я после ввода 123 я введу 4 то в первом блоке памяти будет 31,32,2D,33(уже с дефисом).Просто будет выглядеть классно, профессионально и вам может пригодится. Помогите
>>1208047>А вот можно ли поделить на 3 быстрее команды div интересно узнать. Мб есть какой-нибудь трюк, вроде шифта битов и прибавления числа, как при умножении Если в плавучке - то быстрый обратный корень*2
Есть знатоки VC++ тут? Какого хуя он не компилирует выделенную инструкцию? Или он как то чухает, что я что то неладное затеял со стеком и молча игнорирует мои просьбы? Как обмануть канпелятор? TLS_OEP_OFFSET - не нулевая константа
>>1209125Всё, отбой тревоги. Я наебал компилятор.
А в каком виде ассемблер помещает в код исполняемого файла всевозможные адреса? То есть очевидно же, что он не может знать, какой адрес ОС выделит той или иной переменной во время её инициализации. Так как он помечает эти данные до, собственно, исполнения файла?
>>1209238Как это не может? В заголовке PE или ELF есть адреса. А уже ОС располагает с этого адреса.hint: страничная виртуальная память
>>1209241А если речь идёт о реальном режиме с сегментной адресацией?
>>1209249> А если речь идёт о реальном режиме с сегментной адресацией? Тогда еще проще. В заголовках есть таблица поправок. Каждый раз, когда ты делаешь:mov ax,CSEGгенерируется поправка. Когда файл грузится, MS-DOS проходит по списку поправок и втыкает туда реальные значения сегментов. А внутри самого сегмента адресация "абсолютная", т.е., [ds:10] всегде ds*16+10, вне зависимости от того, куда тебя загрузили.
>>1209323О, спасибо за разъяснения.
Какой корректный синтаксис в FASM для создания процедур? Пикрелейтед не работает.
>>1210309>Пикрелейтед не работаетТы>>include \macro\proc32(64).inc забыл. алсо, proc - это обычный макрос-сахарок, который за тебя аргументы по ABI разруливает. Без него - пердоль руками меточки и ручками по википедии, согласно соглашению твоей операционной системы/разрядности работу с регистрами пердоль.
>>1210309> Какой корректный синтаксис в FASM для создания процедур? Никакого. Макросов для для 16-битного кода нет. Можно, конечно, адаптировать proc32/64, про которые написали выше, но особого смысла в этом нет, ибо 16-битных код нахуй никому не вперся в 2018.
>>1210309> Какой корректный синтаксис в FASM для создания процедур? Никакой. Макросов для для 16-битного кода нет. Можно, конечно, адаптировать proc32/64, про которые написали выше, но особого смысла в этом нет, ибо 16-битных код нахуй никому не вперся в 2018.
>>1210328>>1210333Ясно. Вот такая конструкция сможет имитировать функционал call? Тело процедуры находится в том же сегменте, что и "вызов", так что "вызов" можно считать ближним:push byte $jmp _proc<...>_proc:<тело процедуры>pop AXadd AX,4hjmp AX
>>1210387Во-первых:https://en.m.wikipedia.org/wiki/X86_calling_conventionsВо вторых, нет, используй call. Функции и процедуры делаются с помощью меток и передачей параметров по соглашению о вызовах.
>>1210442ССАЛ Я НА КАНВЕНЦИЮ))))))))))))0 А НА КАЛЛ КАЛ КЛАЛ)))))))))0000000000000
>>1210442Получается, вызов любой процедуры должен быт организован таким, и только таким способом? В статье описана передача параметров через стек. При этом, на различных ресурсах, упоминается передача параметров через регистры. А что, если пользователь решает пойти именно таким путём? При этом мы не знаем, в каких именно регистрах он передаёт параметры в процедуру.
>>1210488>При этом мы не знаем, в каких именно регистрах он передаёт параметры в процедуру.Знаём. По порядку, начиная с rdi.
>>1210489Это ты PUSHA(D) имеешь ввиду?
>>1210442>>1210488>>1210489Получается, сама идея подпрограмм (функции, процедуры, etc) основывается на следующих строго обязательных к исполнению постулатах:1. Определено точное количество аргументов, которые предполагается передавать в данную подпрограмму;2. Определёны множества возможных значений для каждого из аргументов;3. Данный аргумент может принимать значения из заданного для него множества, и только из него;4. Подпрограмма должна работать только с теми данными, что были переданы в неё через аргументы, либо с глобально доступными данными, либо с данными, которые определяются непосредственно в ней.5. Подпрограмма не должна изменять никакие иные данные.6. Подпрограмма может возвращать либо какое-то одно и только одно значение, либо не возвращать никакого вовсе.Верно?
>>1210564И в таком случае, развивая мою предыдущую мысль, код видаcall _proc, означает вызов подпрограммы "_proc" без аргументов.В любом случае, инструкция "call" подразумевает следующие действия:1. Сохранение адреса возврата на вершину стека: push $+4(near) или push $+8(far)2. Сохранение смещения дна стека на вершину стека: push bp3. Поднятие дна стека на уровень вершины стека: mov bp,spБлядь, я думал, что в асме швабодка, что можно как угодно крутить какими угодно значениями, что скверна абстракций высокого уровня мешает незамутнённому восприятию красоты байткода. А тут, ВНЕЗАПНО, оказывается, что львиная доля абстракций языков высокого уровня как раз таки обусловлена особенностями исполнения кода на низком уровне.
>>1210387> Ясно. Вот такая конструкция сможет имитировать функционал call?Почти. push byte недостаточно для переходов в пределах сегмента (64к), надо push word. Далее, ты не различаешь короткие и ближние переходы:jmp @f ; short jump, 2 bytes: eb rel8rb 127@@:jmp @f ; near jump, 3 bytes: e9 rel16rb 128@@:Поэтому лучше сразу написать jmp near _proc. Ну и с учетом всего этого, нужно делать add ax, 6 (3 байта push, 3 байта jmp).>>1210488> Получается, вызов любой процедуры должен быт организован таким, и только таким способом? Нет, кодовые конвенции нужны только для взаимодействия с чужим кодом (и для предоставления API). Внутри своей программы ты можешь делать все, что захочешь. Например, если собирать сишный код с оптимизациями, компиляторы могут раскладывать аргументы в регистры, причем для разных функций в разные. Они это делают, потому что они знают, что функции не вызываются извне, а там, откуда они вызываются, информация об используемых регистрах доступна. Это тоже соглашение о вызове, но в нем компилятор соглашается сам с собой.
>>1210564Чушь какая-то. Идея подпрограмм состоит в том, что есть кусок кода, управление на который передается и потом возвращается им обратно. Как именно, что оно делает, зачем, кто вызывает, как передает аргументы, передает ли вообще - всегда на совести реализации. Есть стандартные подходы, но это не значит, что можно использовать только их.
Ананасы, ткните носом в ссылку с рабочим масмом версии 6.10-6.13. Желательна установка без танцев с бубном.
>>1210652old-dos.ru
>>1210666Был там, у 6.10 файлы битые. Либо не ту версию качал. Какая там гарантировано рабочая?
>>1210669Сложи содержимое всех папок DISK# в одну, проверь, чтобы директория с установочником и директория, в которую устанавливаешь были без пробелов, русских букв и прочих странных спецсимволов (короче, чтобы были валидным досовым 8.3 именем), выбирай Windows NT при установке. У меня все ок.
Не нашел тредов про не x86 ассемблеры, спрошу тут. Как на Z80 делить числа?С умножением все понятно, например 15 x 21 = 15 x (16 + 4 + 1) = 15 x 16 + 15 x 4 + 15 x 1 = 15 << 4 + 15 << 2 + 15.Т.е. в цикле по числу битов (8 или 16) нужно сдвигать первый множитель (15) влево, а второй (21) - вправо, и при флаге переноса CF к результату (изначально 0) прибавлять сдвинутый первый множитель.А вот деление как можно разложить?Z80 умеет выполнять сложение, вычитание, смену знака, логические операции и сдвиги.
>>1210681https://en.wikipedia.org/wiki/Division_algorithmОбычный long division, который "столбиком, как в школе", очень быстро реализуется.
>>1210684>while N ≥ D do> N := N − D>end>return NБиореактор находится в другом месте, сагадаун.
>>1210687То есть до нормального алгоритма ты доскроллить не осилил?
>>1210678Добра и денег тебе, анонче.
>>1210688Под остальные (Integer division with remainder, Restoring division, Non-restoring division) для 16-битного деления не хватает 3-х 16-битных регистров, а сохранять/восстанавливать в стеке - медленно.
Линкёр по мудям лупанул.Первым пиком на: ml.exe /c /coff prog01.asmВторым на: ml.exe prog01.asm /ATБез /coff первый вариант пролетает, но без .com файла, читай: в нихуя.Выручайте, пацаны. Не хочу надолго застрять у старта.
>>1210700Ты можешь делить 16-битное на 8-битное, получая 8-битные частное и остаток, как сделано в x86. Или тормозить. Других вариантов у тебя все равно нет, лишних регистров тебе ни один алгоритм не прибавит.>>1210718> /coffВсе правильно ругается, досовый формат объектников - OMF.> Без /coff первый вариант пролетает, но без .com файлаПотому что /c говорит "только скомпилировать, не линковать", поищи там у себя prog01.obj.Короч, тут такое дело. Я тебя слегка наебал, надо было, видимо, выбирать второй пункт (MS-DOS/Microsoft Windows) и отказываться от виндовых файлов (наверное), тогда оно устанавливает правильный LINK.EXE в %MASM%\BIN. И после этого у меня собрался хелловорлд.
>>1210728Да, ты меня наебал. Теперь и у меня .com собрался и работает.
>>1210623>>1210624Как всё сложно и противоречиво. Но спасибо за пояснялово.
Переубедите меня от использования pushf/popfИнструкции тормозные, но как приятно они упрощают реализацию некоторого алгоритма, что трудно побороть соблазн использовать их.
>>1210564Ты можешь хуярить как хочешь, пока не пересекаешься с чужим кодом. Но когда начинаешь пересекаться - нужно иметь какие-то правила взаимодействовать.
>>1211356Связный вопрос: Как узнать какие регистры не изменит api-функция при любом результате этой функции?
>>1212688Почитай ABI платформы, под которую пишешь. Например, в википедии: https://en.wikipedia.org/wiki/X86_calling_conventions#Microsoft_x64_calling_convention
>>1203524Охуеть, только что сам заметил.https://wasm.in/threads/wsprintf-ne-ochischaet-stek.3877/
>>1212930> wsprintf-ne-ochischaet-steka dolzhen?
>>1213001Должен ли был я написать об этом? Нет, не должен.
>>1212930>что такое cdecl call convention?
Как получить список файлов в папке, нужно для бэкапа.
>>1213196Посмотри.
>>1213207Не вижу. Папку надо открывать?
Ну серьёзно, надо чтобы при запуске проги копировалась папка с неизвестным содержимым. Для этого сначала прога должна узнать содержимое(предполагаю), а потому уже CopyFile выполнять. Как узнать содержимое, searchpath, findfilefirst, findfilenext, вот это?
>>1213296ты объясни тебе нахуя задачи высокоуровневого языка делать на асме?
>>1213298Потому что я не знаю высокоуровневых языков, в этой проге всё равно будет низкоуровневая задача. Короче, она будет мониторить сейвы игры на изменения, если изменение(сохранение) успешно то делает бэкап, если нет то выкидывает окошко поверх игры(такая задумка) и можно попробовать сохраниться ещё раз.
>>1213303>Потому что я не знаю высокоуровневых языковНастало время.
>>1213303это не низкоуровневая задача. если тебе не принципиально это делать именно на асме, то рекомендую взять какой нибудь C# и его FileWatcher с удобной системой событий на изменение файла. если принципиально - кочай конпелятор МАСМа, ищи что в него из WinAPI завезли похожего на файловый монитор.
Как в FASM/16 бит выполнить прямой межсегментный переход? За пикрелейт ругается.
>>1213303FindFirstFile/FindNextFile один раз. А потом подписывайся на изменения - FindFirstChangeNotification/FindNextChangeNotification, ReadDirectoryChangesW - вот это все.>>1213322jmp s_proc:_CALL_record
>>1213415Не мог бы ты ещё подсказать, почему в FASM мы не можем выполнять такую штуку с CS:mov CS,AX
>>1213465Потому что в CS как и в RIP/EIP/IP напрямую в x86 писать нельзя, для этого есть JMP/CALL/RET, в том числе indirect версии, которые читают целевой адрес из регистра или памяти. Алсо, запись отдельно в CS не имеет особого смысла: если у тебя фиксированный IP, ты можешь сделать far jump, а если нефиксированный, то зачем тебе вообще менять CS? Откуда ты знаешь, что в новом сегменте по текущему IP будет валидный код?
Байтмакаки, начал изучать ассемблер, интересует одна вещь: ASCII вшит прямо в камень Интел, или это стандарт на уровне системы, а сам проц работает только с числами, и я смогу поиграться японщиной?
>>1214093Да, процессор работает только с числами, а интерпретация этих чисел целиком на твоей совести, в процессор ничего не "вшито". Но так как людям нужно обмениваться данными, есть общепринятые соглашения о том, какой символ сопоставить какому числу. Одно из них - ASCII (128 символов), но он уже слегка нинужен, потому что есть Unicode (миллион символов, из которых первые 128 такие же как в ASCII). И да, ты можешь поиграться хоть с японщиной, хоть со старославянщиной, хоть с эмодзями, если твоя система умеет это все рисовать.
Таки помогите с pushf/popf. Кому не лениво - посчитайте в тактах время выполнения миллиона итераций pushf/popf. Интересуют значения разных моделей процессоров. Нужно набрать статистику.Если нужна программа - брошу сюда как только доберусь до компьютера. Да поможет вам инструкция rdtsc
>>1214193Если тебе понадобились pushf/popf для арифметики, а не для ебли TF и других неарифметических флагов, ты делаешь что-то очень неправильно.
>>1213472Кстати, в 8086 инструкция mov cs, ax была валидной."On the 86 and 88, but not on the C-MOS versions 80C86 and 80C88, the instruction MOV CS,op is valid and causes an unconditional jump.The C-MOS versions, as well as the NEC V20 and V30 ignore this coding. This may also be the case on the 186 but has not been tested. The 286+ CPUs consider CS an invalid operand for this instruction and generate exception 6 (Invalid opcode).The opcode for the MOV CS,op is: 8e [mod:001:r/m]"
>>1214230Постфиксный инкркмент/декремент внутри условий.Ты понимаешь что inc/fdec ,меняет флаги z и c ?Неправильно сделали авторы языка Си, когда придумали постфиксные операции.Короче, вопрос остаётся в силе - какова цена pushf/popf ?
>>1214526> Неправильно сделали авторы языка Си, когда придумали постфиксные операции.Язык делался не под x86, а под PDP, который (частично) умел в пост-инкременты. Алсо, сейчас оно в ARM отлично поддерживается и очень удобно: mov r0, [r1], #4 прочитает в r0 память по r1, а потом прибавит к r1 4.> inc/fdec ,меняет флаги z и c> какова цена pushf/popfДороже, чем сделать cmp/test заново. Но ты все равно что-то делаешь неправильно. Тащи код.
Вход: a, x, y, mВыход: (a + x y) mВерхние 64 бита каждого умножения и carry флаг при сложении меня не интересуют.Был такой код:mulx r8,r9, rsiadd rdi,r9mov rdx, rcxmulx r8, rax, rdiretЯ могу избавиться от лишнего mov, сохраняя результат умножения сразу в rdx? Может он быть source и destination одновременно? Вот так:mulx r8, rdx, rsiadd rdx, rdimulx r8, rax, rcxret
>>1214773Я пока ничего не делаю, а изучаю вопрос.Потестировал. Вот как-то так: rdtsc mov DWORD PTR _start, eax mov DWORD PTR _start+4, edx mov ecx, 1000000label_loop: pushf ; nop popf loopnz label_loop rdtsc mov DWORD PTR _stop, eax mov DWORD PTR _stop+4, edx Выходит что пара pushf/popf в среднем занимает 100 тактов. Это очень дохуя. Придётся отказаться от их использования и лепить дополнительные проверки/переходы.Но всё же интеренсно как поведут эти инструкции на других x86 "камнях".
Ну и говно эта ваша Makaba - херит табуляцию.
>>1141585>к вся молодежь ушла в вебЭто биомусор, а не люди.
>>1147515>attassemblerlin[...].webm>mov ecx, 0xor ecx, ecx нада, дурень
Если оп до завтра не объявится, я нелегитимный запилю.
>>1215976Ой, а у нас бамплимит уже! Запили, только шапку не проеби.
>>1215897Это заблуждение из времён 8086.
>>1215976>Если оп до завтра не объявится, я нелегитимный запилю.ОП-хуй здесь.
>>1216104А вот и перекот. Хуй знает зачем перекатываю и вообще слежу, сам уже ничего не делаю, но тред родной уже.ПЕРЕКАТ>>1216107 (OP)>>1216107 (OP)>>1216107 (OP)ПЕРЕКАТ>>1216107 (OP)>>1216107 (OP)>>1216107 (OP)ПЕРЕКАТ
>>1216109> сам уже ничего не делаюНадоело или потеряло смысл?
>>1216110Для меня сейчас всё потеряло смысл. Хотя наконец-то нашёл работу по профилю уеб-макакой а не полы пидорасить, может, получшает. Да и сам на десятку переехал пару месяцев назад, так что допилка XP теперь только в качестве спортивного интереса, десятку я так и за 1000 лет не отревершу. Надо бы собраться с силами и выложить накоденное.
>>1216109:3
>>1134423А если нужно из одной процедуры вызвать вторую, а из второй третью и т.д.? Тут не в регистр нужно записывать, а в стек, чтобы хранить цепочку ссылок, по которым тебе нужно будет возвращаться. Да и вообще, что это за идиотизм, избавляться от call'ов только, чтобы избавиться от call'ов? Если в коде много процедур, он же заебется для каждой прописывать push label, jmp proc, pop ebx и jmp ebx. И это не добавляет "хорткорности", это просто идиотизм. С тем же успехом можно запретить использовать любые числа, кроме двоичных, потому что ХОРТКОООР. Или вот тебе еще идея: избавься от возможности вводить в память строки в кавычках, пусть пишут ASCII-коды символов опять же, в двоичном коде, чтобы уж точно не для тупых казуалов.
>>1243331Отписался в мертвом треде -_-