• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Коллбэк в .net

  • Автор темы evilden
  • Дата начала
E

evilden

Прошу помочь в следующем. Необходимо вызвать функцию приложения win forms из dll написанной на обычном си или ассемблере. Не получается по человечески передать параметры функции.
вот пример
C++:
///функция в приложении с++.net
void ComWndFunc(int n)
{

GlobalObjects::form_->textBox1->Text+=n;
//и что либо другое.
}

//функция в dll
extern "C"_declspec(dllexport)void SetCallFunc(void (*fn)(int))
{

fn(2);
}
//Передача указателя на функцию приложения
[DllImport("testc.dll")]
extern "C" void SetCallFunc(void(*)(int));

SetCallFunc(&ComWndFunc);
В итоге функция вызывается но на экран например выводится 1. в отладке в n кладется тоже самое..Хотя функция вызывается и выводит
на экран эту единичку.Что можно с этим сделать?
 
U

userdab

Посмотрите , мож поможет
 
E

evilden

Посмотрел давно нечто подобное.делаю так.
C++:
delegate void Func_1(char*n);
Func_1^func1;

func1= gcnew Func_1(this,&Form1::SetText);//где SetText-функция которую необходимо вызывать из dll.
IntPtr hFunc1 = Marshal::GetFunctionPointerForDelegate(func1);
SetCallFunc(hFunc1); //передаю в dll в качестве параметра указатель на функцию
Но теперь портится указатель стека ESP из за чего программа и dll становятся полностью неадекватными..В чем может быть дело?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!