Maxim
свою dll. по идее она уже есть на шарпе, делаю апи приложение к софту
Maxim
обидно, открыл в дотпике, все как на ладони
Maxim
он копирования)
Maxim
не, практически один в один. Если без обфускаторов
Berkus
native code тоже реверсится легко
Berkus
IDA Pro или аналог и вперед
Berkus
На LLVM написали тулу которая умеет ДЕобфусцировать обфусцированный код
Berkus
я к тому что он ничего таким образом не защитит
Maxim
спасибо, я не хотел связываться с обфускацией, с++ сломать сложнее ничего не защищая... Думал как то на нем попробовать
Maxim
да
Maxim
я не смотрел еще ссылки выше, не знал о этой возможности
Stanislav
uwp умеют
Stanislav
плюс пилят https://github.com/dotnet/corert
Stanislav
Stanislav
альтернатив то нет
Крылатый
А смысл?
Крылатый
А когда ещё?
Крылатый
Ночью будет пофик уже.
Dr. Friedrich
Это неправда, нет такого определения.
Dr. Friedrich
Если надо — то можно и в «нормальный» бинарник. Но это оффтоп всё.
Dr. Friedrich
Если б нельзя было в бинарник, то не работало бы под айфончиками всякими.
Dr. Friedrich
Нет, не так вообще.
Dr. Friedrich
А если libcpp используется — тогда нативный?
Dr. Friedrich
Прости, но ты неправ.
Dr. Friedrich
Если код сгенерирован под целевой CPU, то он нативный. Вне зависимости от того, какие ещё библиотеки в этот бинарник влинкованы.
Dr. Friedrich
И, нет, Mono AOT не вкомпиливает байткод в итоговые бинарники.
Dr. Friedrich
Там именно честная компиляция в честный нативный код.
Dr. Friedrich
Мы говорили про Mono AOT вообще-то. Но, да, это второй возможный вариант.
Dr. Friedrich
Но этот уже со страшными ограничениями работает.
Крылатый
Форневер винс!
Stanislav
Stanislav
ждем-с
Stanislav
у юнити своя поделка есть, но она у них вроде только для мобил работает
Dr. Friedrich
Я говорил вот про это: http://www.mono-project.com/docs/advanced/aot/#full-aot
Stanislav
Dr. Friedrich
Dr. Friedrich
Потому что вся эта фигня используется для Xamarin.
Dr. Friedrich
Но этот режим прям полноценно поддерживается и тестируется.
Dr. Friedrich
Ну, эээ, на диск?
Dr. Friedrich
Куда скажешь.
Dr. Friedrich
Зачем в локальный кэш, что им там в кэше делать?
Dr. Friedrich
Мне кажется, ты путаешь с другим механизмом.
Dr. Friedrich
Во-первых, не любых, а во-вторых — да, но это другой механизм и есть :)
Dr. Friedrich
Есть класс в c# dll, я его никак не могу изменить, могу работать с ним из шарпа, в этом случае проблем нет и все проще намного. Но нужно из с++.
Сам класс из c# dll:
Public class Point
{
public double X;
public double Y;
public double Z;
public Point();
public Point(Point Point);
public Point(double X, double Y);
public Point(double X, double Y, double Z);
еще код, но он мне неинтересен
}
Используя функции extern "C" {
TRADITIONALDLL_API double GetDistance(Location, Location);
} проще, но у меня класс и получить результат я могу только так: double S = Math.Sqrt((P2.X - P1.X) * (P2.X - P1.X) + (P2.Y - P1.Y) * (P2.Y - P1.Y));
Вот статья, но тут используется структура https://docs.microsoft.com/en-us/cpp/dotnet/how-to-marshal-structures-using-pinvoke
делая структуру в с++ dll, вызываю ее в шарпе так:
struct TraditionalDLL
{
[DllImport("TraditionalDLL3.dll")]
public static extern double dist(Point p1, Point p2);
}
потом double S = TraditionalDLL.dist(P1, P2);
но это не работает, ошибка
О, а по интеропу подскажу. Классы между нативным и управляемым кодом никак не пробрасываются, оставь эту затею :(
Dr. Friedrich
Структуры пробрасываются, можно хоть по указателю, хоть по значению, как хошь.
Stanislav
Dr. Friedrich
Я надеюсь, C++/CLI выпилят и сделают вместо него что-нибудь нормальное. Ну, например, обычный C++, который бы таргетился на CLR.
Dr. Friedrich
Пускай даже с ограничениями — это была бы уберполезная штука только из-за плюсовых шаблонов.
Dr. Friedrich
Нет, совсем нет.
Stanislav
Dr. Friedrich
Во-первых, это не нормальный C++, а совершенно отдельный язык с отдельным стандартом.
Stanislav
.нет кодегенят в с++ )
Stanislav
https://msdnshared.blob.core.windows.net/media/2016/10/native2.png
Dr. Friedrich
А во-вторых, он компилируется так, как я хочу, только в pure-режиме. И не кроссплатформенно нифига. Такого нам не надо.
Dr. Friedrich
Да.
Dr. Friedrich
Даже стандарт выпускает не ISO, а ECMA.
Dr. Friedrich
Разве это нормально?
Dr. Friedrich
Нет, это нифига не нормально :)
Dr. Friedrich
Это утверждение ложно.
Dr. Friedrich
В MS тоже эти языки вполне себе разделяют. И, если обычный C++ развивается в соответствии с нормальными человеческими общепринятыми стандартами, то на /CLI просто забили пока что (пожалуй, что и к лучшему).
Dr. Friedrich
Ладно, пятиминутку оффтопа закончили :)
usernameak
вопрос
usernameak
откуда вызываются глобальные конструкторы
Anonymous
implementation-defined
Anonymous
Посмотри стектрейс и узнаешь.
usernameak
а можно что то вызвать как глобальный конструктор, но без создания объекта?
usernameak
типа при инициализации всего вызывать
Anonymous
Тебе надо вызывать код до main?
usernameak
до
Anonymous
Зачем?
usernameak
надо
Anonymous
Если GCC/Clang то чекни __attribute__((constructor)). Кажется что-то похожее.
Anonymous
А так — инициализация любой статической переменной.
Anonymous
int pre_main() {
return 0; // dummy value
};
int aaaaaaa = pre_main();
int main() {
}
Anonymous
Это опять же создание объекта, но судя по всему единственный переносимый способ.
Aleksei
Всем привет.
Столкнулся с проблемой, что программа жрет много оперативки, хотя казалось бы не должна.
Есть виртуалка (kvm) с примерно 800 мб оперативы и линуксом (а-ля дебиан). Иногда программе не хватает памяти и её убивает операционка. Смотрел top'ом, он показывает, что она использует 80%.
Решил посмотреть, что пишет massif. Если запускать с обычными параметрами, то он показывает 79мб в пике (по прикидкам, столько и должно быть). Попробовал запустить с параметром --pages-as-heap=yes, тут он и показал 700+ мб. Но вот откуда они берутся, я не понимаю. Например, вызов setlocale выделяет 113 метров O_O. И таких мест не одно...
Сделал пример простейший
https://gist.github.com/krepver/cab74d6c576f03bebbb26b49f4aa1d52
Откуда они берутся? И можно ли что-то с этим сделать?
Aleksei
massif это и есть тулза valgrind'а
Aleksei
это ж не винда :)