Добрый день!
В попытке разобраться, почему я могу успешно отправлять и принимать запросы на веб-сервер на языке C и почему я не могу того-же сделать на языке ассемблера, заметил вот такую особенность:
request db "GET / HTTP/1.1\r\nHost: myip.ru\r\n\r\n"
char* c = "GET / HTTP/1.1\r\nHost: myip.ru\r\n\r\n";
Абсолютно одинаковые строчки с GET запросом сохраняются в оперативной памяти по-разному, а именно вот так выглядит hex код первой строчки из программы, которую собрал мне ассемблер:
47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 5c 72 5c 6e 48 6f 73 74 3a 20
6d 79 69 70 2e 72 75 5c 72 5c 6e 5c 72 5c 6e
А так на C:
47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a 48 6f 73 74 3a 20 6d 79
69 70 2e 72 75 0d 0a 0d 0a
Это строчка в utf-8, причем онлайн конвертер hex-to utf8 выдал вот такой результат:
GET / HTTP/1.1\r\nHost: myip.ru\r\n\r\n
Вроде-бы, то что надо - но с этим запросом не работало
Теперь проверяю, как эту строчку обработал компилятор C:
GET / HTTP/1.1
Host: myip.ru
На вид они различаются, нету управляющих символов и именно с этой строкой успешно получается получить главную страницу сайта. Вопрос: почему так случается, почему в первом случае управляющие символы экранируются и как этого избежать?