Size: a a a

Android NDK (C++) — русскоговорящее сообщество

2019 December 16

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
я бы смотрел в сторону asan под visual studio
источник

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
источник

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
во всяком случае в Xcode он часто спасает, когда начинается магия, включаешь address sanitazer + memory scribble и видно кто чужую память портит.
источник

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
думаю в Visual Studio то же самое.
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Я отключил оптимизацию кода, теперь переменная len (которая во втором видео) не изменяется. Но проблема с размером буфера осталась, если вызывать printf.
источник

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
Max
Я отключил оптимизацию кода, теперь переменная len (которая во втором видео) не изменяется. Но проблема с размером буфера осталась, если вызывать printf.
Ну так ты смотрел на EAX - это просто регистр, там может лежать что угодно. Открой стек и смотри ESI+2 это указатель на стек + сдвиг. Оттуда идет загрузка в EAX, потом push положили параметр вызова функци в стек. call вызов функции. и дальше уже проверка на 0 и далее по коду.
источник

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
посмотрел первое видео. там у vs крыша едет. выполнение не должно останавливаться на комментарии или пустой строке. судя по всему там какой-то рассинхрон у дебагера и исходника.
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Вот ключи, ранее писали. Вроде бы они
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
источник

o

oles in Android NDK (C++) — русскоговорящее сообщество
/O2 это оптимизация?
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Скорее всего, но в основных настроцках она отключена. Она ещё в другом месте прописана, но отключение ничего не изменило, к сожалению
источник

o

oles in Android NDK (C++) — русскоговорящее сообщество
Max
Если нужно, я могу кинуть полный асм, но вот ещё видео. Отладка в IDA. Видно и асм, и псевдо Си. Как я понял, вот этот вызов call unk и меняет значение.
yadi.sk/i/2l3LdiLsThYx6g
ты по оптимизированному коду дебажишь чтоли? там явно чтото не то
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Я выяснил, на какое значение меняется моя переменная. В зависимости от кода значения будут разными. Если говорить о моём случае, когда значение менялось из-за вызова printf, то менялось оно на адрес команды после вызова функции (то есть на команду после call). Что-то не то творится со стеком. Значение переменной будто затирается.
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Вместо printf я вызывал пестую функцию, которая ничего не возвращает, а на вход принимает int.
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Вот что вышло
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
источник

o

oles in Android NDK (C++) — русскоговорящее сообщество
Max
Вместо printf я вызывал пестую функцию, которая ничего не возвращает, а на вход принимает int.
Ну вот по шагам зайти в этот ver и посмотри как оно стек кораптит
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Мне кажется, нужно что-то дописать к объявлениям внешних функций, ведь Dll_LoadFile - это функция, которая находится в вызывающей программе. Или же что-то дописать к настройкам компилятора.
источник

o

oles in Android NDK (C++) — русскоговорящее сообщество
Max
Мне кажется, нужно что-то дописать к объявлениям внешних функций, ведь Dll_LoadFile - это функция, которая находится в вызывающей программе. Или же что-то дописать к настройкам компилятора.
Просто по шагам пройди эту функцию или ее дизасм покажи хотябы
источник

M

Max in Android NDK (C++) — русскоговорящее сообщество
Вот ver
источник