itmoasm2015/Homework3

Белоногов Иван 2539

Closed this issue · 15 comments

Написал полную версию с делением и выводом в строку.

test.cpp:2:17: fatal error: gmp.h: No such file or directory
 #include <gmp.h>

Если Makefile делает еще что-то, кроме требуемой библиотеки, он хотя бы падать не должен.

Исправил

Нет, всё то же самое.

Вот теперь точно должно стать лучше!

Да нет же! Я запускаю make в вашей папке, а он пытается компилировать tester.cpp и не находит gmp.h.

Строка "22-2" не должна допускаться функцией biFromString.

Хм. Я делаю git clone в новую папку запускаю и у меня всё работает. У меня, видимо, gmp является встроенным в g++.

Сейчас я удалил тесты, которые использовали gmp.

Исправил

Проверьте поведение biToString в случае маленького лимита. Лимит 3 — должно быть 2 цифры и завершающий ноль.

Можно поподробней в чём проблема.
Я это тестировал. И оно работает.

s = "-12345";
bi1 = biFromString(s.c_str());
char buffer[4];
biToString(bi1, buffer, 4);
string tmp(buffer);
assert(tmp == "345"); 

assert не падает

Я изменил тест. Теперь не проверяется результат, а только обращения к памяти за пределами лимита с помощью mprotect(2). И у вас обращения к памяти есть.

Я проверяю с помощь флага -fsanitize=address. Он ловит такие вещи. У меня работает всё кроме теста, когда размер буфера 1, и вообще можно записать только нулевой символ.
Это исправил.

Program received signal SIGSEGV, Segmentation fault.
hw_biToString.trimmed () at asm_impl.asm:590

Там r8 в память записывается, а он 8 байт. Лимит 3 байта. Вот и выход за границы.

Спасибо, поправил

Код 7, комментарии 7.