Если взять за основу эту схему, то становится понятно, как код процесса может узнать адреса текста, инициализированных данных, неинициализированных данных
и кучи
не ясно, как становится известен адрес стека и аргументов командной строки
Как перевести этот код с C++?
mov ebx, [ebp - 8]
lea ebx, [ebp - 8]
lea edx, [ebx + ecx + 4] ; add FirstThunk RVA to base. Offset &function is 4
lea edx, [edx + 20] ;size of IMAGE_THUNK_DATA
можно ли ее как-то улучшить
при компиляции флаг из реестра не удаляется. В чем может быть проблема?
Байты из зеленой области, как я понял, это информация линкера golink. Так ли это?
Подскажите пж, в чем может быть проблема?
REG DELETE HKCU\keys /v key
и убедиться, что желаемое действие происходит (я так понимаю, что keys и key -- это затычки, в реальном коде указаны конкретный путь в реестре и конкретное имя значения).xor eax, eax
после возврата из WinExec, чтобы результат пришёл в ExitProcess -- и посмотреть на код завершения процесса. mov byte [sockaddr_in + 0], AF_INET ; sin_family
mov byte [sockaddr_in + 2], 0 ; sin_port[0] это старший байт sin_port
mov byte [sockaddr_in + 3], 80 ; sin_port[1] а это младший
Фактически, по адресу 0x0060 лежит какой-то мусор, который никак не относится к тому, что я туда хотел положить.
__do_copy_data
и __do_clear_bss
в каждую единицу трансляции, в которой определяются объекты в секции .data и .bss соответственно. В написанных руками ассемблерных файлах их можно упомянуть явно. Если же разместить в стеке локальные четырёхбайтные переменные, то они окажутся доступны по адресам [esp-4] , [esp-8] и т. д.
Смутило последнее предложение: почему автор указал, что можно адресоваться выше стека?
void OutFloat(double v);
sub sp,16
mov bp,sp
fstp qword ptr [bp + 8]
call OutFloat
add sp,16
.file "main.c"
Зачем в коде название файла с исходным кодом
.ident "GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0"
...и версия моей убунты?
Попадают ли они в исполняемый файл при окончательно компиляции и зачем используются?
$ readelf -a hello | grep FILE
28: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
37: 0000000000000000 0 FILE LOCAL DEFAULT ABS hello.c
38: 0000000000000000 0 FILE LOCAL DEFAULT ABS crtstuff.c
41: 0000000000000000 0 FILE LOCAL DEFAULT ABS
.comment
объектного файла, а оттуда -- в исполняемый файл:$ objdump -s -j .comment hello
hello: file format elf64-x86-64
Contents of section .comment:
0000 4743433a 20284465 6269616e 20362e33 GCC: (Debian 6.3
0010 2e302d31 382b6465 62397531 2920362e .0-18+deb9u1) 6.
0020 332e3020 32303137 30353136 00 3.0 20170516.
Какой тулчейн можно использовать для написания простейшего загрузчика на asm и С++
Почему у меня при отладке (картинка 1), и при чужой отладке (картинка 2) в сегменте, внизу, где четыре строки es, значения совершенно отличаются, хотя это отладка одной и той же программы?
;1 вариант mov ah,02h int 1Ah inc cl mov ah,06h int 1Ah;
Мы получаем текущее время, прибавляем к минутам единицу и настраиваем будильник (случаи, когда 59 минут можно не рассматривать)
inc cl
недостаточно, нужно mov al, cl ; inc al ; daa ; mov cl, al
.