Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
1

Поиск в .exe и .dll методов и их запуск

20.04.2012, 21:52. Показов 2414. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо реализовать программу, позволяющую просматривать содержимое .exe и .dll, т.е. выводить все методы, используемые в программе, их тип (это уже сделал). так же эта программа должна запускать выбранный метод. вот запуск как раз и не получается. использовал статейку от сюда http://itmodus.ru/articles/59, однако ни к чему путному это не привело
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2012, 21:52
Ответы с готовыми решениями:

Запуск Load.dll (бывшая Load.exe) в дереве проц-ов, Как запустить прогой на C# .dll-ку
Подскажите, как должен выглядеть код простейшей программы на C# (Loader.exe), которая бы загружала...

Запуск exe/dll при завершении работы
Собственно интересует: Какие методы есть для запуска exe/dll файла при завершении работы...

IDA, поиск функции из DLL и выполнение в EXE
Добрый день. Подскажите, пожалуйста. Я хочу из чужой DLL узнать, какими функциями выполнить...

Svchost.exe, onion.exe, openvg.exe torrc и куча dll и cl, а также папка tor в Roaming

15
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
20.04.2012, 21:54 2
покажите свой код
0
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 21:55  [ТС] 3
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 openFileDialog1.Filter = "Сборка|*.exe;*.dll";
            openFileDialog1.ShowDialog();
            file = openFileDialog1.FileName;
 
            StreamReader sr = new StreamReader(file);
            try
            {
                richTextBox1.Text = "";
                comboBox1.Items.Clear();
                Assembly Ass = Assembly.LoadFrom(file);
                Type[] MyT = Ass.GetTypes();
                Module[] MyM = Ass.GetModules();
 
                foreach (Type t in MyT)
                {
 
                    richTextBox1.Text = richTextBox1.Text + "Класс: " + t.FullName + "\nБазовый тип = " + t.BaseType.FullName;
                    richTextBox1.Text = richTextBox1.Text + "\nМетод: ";
                    MethodInfo[] MyMeth = t.GetMethods();
                    MethodAttributes MyMethAtr;
                    foreach (MethodInfo me in MyMeth)
                    {
                        MyMethAtr = me.Attributes;
                        if (me.Module == MyM[0])
                        {
                            richTextBox1.Text = richTextBox1.Text + " " + me.Name + " - " + me.ReturnType.ToString() + ";";
                            comboBox1.Items.Add(me.Name);
                        }
 
 
                    }
                    richTextBox1.Text = richTextBox1.Text + "\n-------\n";
                }
                foreach (Module m in MyM)
                {
                    richTextBox1.Text = richTextBox1.Text + "Файл: " + m.Name;
                }
            }
            catch
            {
                MessageBox.Show("Ошибка чтения");
            }
            finally
            {
                sr.Close();
            }
вот тут я вывожу необходимую информацию
0
25 / 25 / 8
Регистрация: 26.11.2011
Сообщений: 157
20.04.2012, 22:20 4
.NET Reflector
0
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 22:23  [ТС] 5
Цитата Сообщение от Black-millenium Посмотреть сообщение
.NET Reflector
именно, но его и нужно использовать, но как, что и куда?
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
20.04.2012, 22:32 6
И каким образом вы пытаетесь запустить метод?
0
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 22:35  [ТС] 7
freest, пока что создал dll и новый проект, уже в этом новом проекте пытаюсь что-то освоить как в этой статье http://itmodus.ru/articles/59


а вообще, не думаю, что мой вопрос первый в своем роде. должны же быть какие-то реализации и наработки, вот только гугл ничего путного, кроме той статьи, мне не выдал
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
20.04.2012, 22:38 8
я просто пока-что не понимаю в чем у вас проблема, если есть возможность выложите проект с либами над которыми можно проводить експеремент
0
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 22:42  [ТС] 9
проблема теперь в следующем- запустить выбранный метод. для этого ведь нужно передать имя метода, его тип, название класса, в котором он находится
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
20.04.2012, 22:43 10
Вы используете WPF?
0
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 22:46  [ТС] 11
freest, нет. использую windows.form
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
20.04.2012, 22:48 12
Я не помню, в комбобокс можно в ItensSource передать MethodInfo?
0
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 22:54  [ТС] 13
можно, но я думаю, что лучше использовать множества или хештаблицу, для того, чтобы была возможность из комбобокса получить название метода и ему сопоставить тип метода и т.д.

может есть способ попроще?
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
20.04.2012, 23:10 14
Если список методов сделать ItemsSource, DisplayMemberPath="Name", than SelectedItem will be MethodInfo, that we want invoke.

Добавлено через 8 минут
Если вы напишете мне в асю, то это будет удобней
1
0 / 0 / 1
Регистрация: 03.03.2012
Сообщений: 19
20.04.2012, 23:41  [ТС] 15
новый вопрос- как принимает ли метод какие-либо параметры?
0
Українець
424 / 318 / 16
Регистрация: 26.09.2009
Сообщений: 844
21.04.2012, 00:11 16
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
 
 
namespace lab9
{
    public partial class Form1 : Form
    {
 
 
        public string file;
        public Form1()
        {
            InitializeComponent();
            Methods=new List<MethodInfo>();
        }
 
        public object ExtAss;
        public List<MethodInfo> Methods { get; set; }
        private void button1_Click(object sender, EventArgs e)
        {
            Methods.Clear();
            openFileDialog1.Filter = "Сборка|*.exe;*.dll";
            openFileDialog1.ShowDialog();
            file = openFileDialog1.FileName;
            StreamReader sr = new StreamReader(file);
            try
            {
                richTextBox1.Text = "";
                comboBox1.Items.Clear();
                var Ass = Assembly.LoadFrom(file);
                Type[] MyT = Ass.GetTypes();
                Module[] MyM = Ass.GetModules();
                var ass = Ass.GetType("ExtAssembly.SampleClass");
                ExtAss = Activator.CreateInstance(ass);
                foreach (Type t in MyT)
                {
 
                    richTextBox1.Text = richTextBox1.Text + "Класс: " + t.FullName + "\nБазовый тип = " + t.BaseType.FullName;
                    richTextBox1.Text = richTextBox1.Text + "\nМетод: ";
                    MethodInfo[] MyMeth = t.GetMethods();
                    MethodAttributes MyMethAtr;
                    foreach (MethodInfo me in MyMeth)
                    {
                        MyMethAtr = me.Attributes;
                        if (me.Module == MyM[0])
                        {
                            richTextBox1.Text = richTextBox1.Text + " " + me.Name + " - " + me.ReturnType.ToString() + ";";
                            Methods.Add(me);
                        }
 
 
                    }
                    richTextBox1.Text = richTextBox1.Text + "\n-------\n";
                }
                foreach (Module m in MyM)
                {
                    richTextBox1.Text = richTextBox1.Text + "Файл: " + m.Name;
                }
            }
            catch
            {
                MessageBox.Show("Ошибка чтения");
            }
            finally
            {
                sr.Close();
            }
            comboBox1.Items.AddRange(Methods.ToArray());
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            var method = comboBox1.SelectedItem as MethodInfo;
            if (method == null) return;
            var parametrsInfo=method.GetParameters();
            var parametrs = new object[parametrsInfo.Length];
            for (var i = 0; i < parametrsInfo.Length; i++ )
            {
                parametrs[i]="String";
            }
            String str = (string)method.Invoke(ExtAss, BindingFlags.InvokeMethod | BindingFlags.Default
                , null, parametrs,null);
            MessageBox.Show(str);
        }
 
 
 
       
 
    }
}
1
21.04.2012, 00:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2012, 00:11
Помогаю со студенческими работами здесь

Возможно ли собрать .exe и несколько .dll в один .exe?
Просто написал программку, получилось &gt;6 .dll файлов, с этим ничего нельзя поделать без &quot;отучения...

Dll файл в exe файле. Вшить dll libcurl
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe....

EXE & DLL, DLL не запускается, 500 ошибка
Делаю EXE, скрипт простой, всё работает, на Apache и FPServer. Компилирую в DLL, закидываю на...

Как объеденить файлы dll с exe ? Чтобы в итоге был только один exe файл
У меня есть 15 dll и 1 exe.Как их объеденить вместе?Чтобы получился только один EXEшник


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru