с двумя переменными, что то у меня больше dworda переменные туда не лезут в 32 бита, хотел спросить это нормально?
а почему с консолью балуетесь? с ГУИ же проще. А то с консолью все через Ж..., вернее через msvcrt.dll, хотя я разницы не вижу Ж... или msvcrt.dll. любите вы консольщики городить. format PE GUI 4.0 entry Start include 'win32a.inc' section '.data' data readable str1 db 'HelloWorld',0 section '.code' code readable executable proc messageBoxWrapper stri1 call [MessageBox],0,0,[stri1],MB_OK ret endp Start: stdcall messageBoxWrapper, str1 retn section '.idata' import data readable library user32,'user32.dll' import user32, MessageBox, 'MessageBox'
По-моему он совсем не это хотел сделать. Ему нужно передать два аргумента, а в функции соединить эти два аргумента (передаётся два набора байт), передать в стэк (но мы ведь знаем, что легче сразу соединить их в стэке😎) и вызвать функцию вывода, получив уже одну строку из двух И в чём то вы не правы с консолью и GUI. MessageBoxA выполнится медленнее, чем WriteConsoleA с kernel32.dll. Про msvcrt всё верно - далёкая от API ОС, по этому и медленная, да и куча лишнего там для обычного вывода.
нехорошая привычка именно так пользоваться стеком. случись что то посложней и все, мучительная отладка обеспечена
это нормально. нельзя впихнуть невпихуемое. но а сишники бы тебе сказали что строки передаются по ссылке, а не по значению
Строки надо формировать в динамической памяти и никак иначе! 🤣🤣🤣
судя по тому что ты итак стек не выровнил у тя даже в таком виде не получится из процедуры своей выйти
да вроде нормально работает , я в дебагере проверил, закрывается и printf и getch и ret и endp отрабатывает и exitprocess к ollydbg только никак не привыкну edb как то привычнее стал, и тут при sub esp почему то в стеке ссылки на ntdll оказываются, потом уже значением затираются, не понятно что это туда влетает или было уже там
а ты имеешь ввиду align 4 перед proc сделать, что то типа того?
нашел ответ на свой вопрос, почему во фрейме стека данные были, потому что стек не чистит никто т.к. это очень дорого по времени вот и остаются данные в памяти лежать как попало, после работы прошлых функций, теперь хоть понятно что это не параллельно туда что то вписывают другие процессы
Обсуждают сегодня