Vadim Yegorov
Денис Юричев - Reverse Engineering для начинающих
Vadim Yegorov
Я ее читал давно, теперь понадобилась
ᅠ
Vadim Yegorov
Vadim Yegorov
А не 600
ᅠ
Значит не правильно понял, извини.
Vadim Yegorov
Эта у меня есть полная
Vadim Yegorov
Блина взял и удалил, а где скачивал обе версии сразу не помню
Yura
Schrödinger's
В nasm, как формируются отрицательные числа в 16ричной сс
Schrödinger's
Two's compliment или просто минус можно
Eugene
Two's compliment или просто минус можно
Так же, как и в остальных асмах.
Что значит "или"?
Дополнительный код — это формат хранения.
Минус — это строковая запись.
Если нужно значение -1000 типа WORD, то пишешь -1000 или 0xFC18.
Schrödinger's
Schrödinger's
И подобное
Schrödinger's
О
Schrödinger's
Это я и хотел узнать
Eugene
Я о том что корректна ли запись -0xFA
Ну почему же, вполне корректна. Другой вопрос, то ли ты получишь, что хочешь?
Это будет эквивалентно -250.
Покажи конструкцию, в которой ты это хочешь написать?
Eugene
И что хочешь получить.
Schrödinger's
Schrödinger's
Это должно выйти мин число для знакового байта👀
Schrödinger's
Мб
Eugene
😁
Тут минус вообще ни на что не влияет :)
Ибо байт 128 и -128 - это одно и то же.
Schrödinger's
Окей, тогда пусть -0х7f
Eugene
Аналогично -127 или 129 или 0x81.
Schrödinger's
Тоесть такое объявление применимо вполне?
Eugene
16-ричное число ничем, кроме формы записи (префикс + 16 вариантов цифр вместо 10) не отличается от десятичного.
Schrödinger's
Окей, спасибо
Eugene
Тут нюанс может быть таким, что NASM скорее всего примет в качестве байта значение от -128 до 255, поэтому, скажем, -0xFF не прокатит (скорее всего), т.к. это -255.
Marsel
чем можно вскрыть файл .dat 90х годов? там внутри текст, но блокнотом ее не открыть
Eugene
Eugene
Тем более про.асм.
Eugene
alexey ⚡️
С днём программиста
Вчера вроде был..
Sergey
Eugene
alexey ⚡️
Взаимно! 💥
пик балмера достигнут, пора покодить 😃
Хер с вами, с праздником
ඞ
Прив челики, давно тут не появлялся.
ඞ
В общем, расклад такой, что у меня gcc си-прогу так компилит, что переменные в стеке появляются в порядке отличном от объявленного.
ඞ
Он буферы последними пишет.
ඞ
Это что за поведение такое, как настраивается?
Aiwan \ (•◡•) / _bot
что за буферы? может это локальные переменные
ඞ
ඞ
Ну я сижу стэк ковыряю в gdb
Aiwan \ (•◡•) / _bot
char[]
продолжай мысль, но только одним сообщением
ඞ
Пытаюсь переполнять буффер, а он по другому адресу, нежели я его ожидаю. Т.е. например объявлен первым, а по адресу последним.
ඞ
Т.е. дальше всего от адреса возврата.
Aiwan \ (•◡•) / _bot
ну так и должно быть, в стек кладутся в обратном порядке при обявлении
ඞ
Aiwan \ (•◡•) / _bot
proc myproc param1,param2, ..., paramn
push paramn
...
push param2
push param1
Aiwan \ (•◡•) / _bot
ඞ
aaaa
Ну да, не высказался понятнее. Переменные, что в теле объявлены.
ඞ
Локальные
Aiwan \ (•◡•) / _bot
видду того что в стеке все наоборот мож данное поведение единственное правильное?
ඞ
Т.е. объявлено
main(){
char c[10];
int val;
}
А ближе к вершине стэка будет c[10]
Aiwan \ (•◡•) / _bot
ну так и должно быть, "ближе к вершине" это значит с наибольшим адресом
ඞ
ඞ
Вершина стэка с наименьшим адресом.
Aiwan \ (•◡•) / _bot
сначало стек съелся для char c, потом адрес уменьшился - съелся на int val
ඞ
ඞ
Я так понимаю, какая-то фича строки на самый верх тащить.
Aiwan \ (•◡•) / _bot
char c имеет больший адрес по своему абсолютному значению, но при этом смещени яотносительно ebp наименьшее (хотя не, не так сказал как то).
с ——- ebp-10
val——-- ebp-14
ඞ
>The compiler can decide on the order of variables for memory allocation
ඞ
Ну вот такое получается
ඞ
Видимо, раньше gcc этого не делал, а теперь делает.
Aiwan \ (•◡•) / _bot
так мож поэтому и надо писать на асме, а не на си? чтоб знать что в памяти лежит ровно то что ты туда положил
ඞ
ඞ
ඞ
как гуглить?
ඞ
alignment?
ඞ