Действительно ли x86 является ассемблером через возможную.NET?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

18
задан GeorgePotter 4 May 2012 в 13:13
поделиться

7 ответов

Как часть некоторой ранней разработки прототипа, которую я сделал на персональном проекте, я записал довольно мало кода, чтобы сделать что-то вроде этого. Это не берет строки - x86, коды операций являются методами на классе X86Writer. Не зарегистрировал вообще и нигде не имеет близкого полного обзора, но если бы он представлял бы интерес, я желал бы к открытому исходному коду он в соответствии с Новой лицензией BSD.

ОБНОВЛЕНИЕ: хорошо, я создал тот проект - Управляемый. X86

14
ответ дан 30 November 2019 в 08:48
поделиться

Смотрите на Финикс от Microsoft Research.

2
ответ дан 30 November 2019 в 08:48
поделиться

Космос также имеет некоторую интересную поддержку генерации x86-кода:

http://www.gocosmos.org/blog/20080428.en.aspx

1
ответ дан 30 November 2019 в 08:48
поделиться

Не непосредственно от C# Вы не можете. Однако Вы могли потенциально записать свой собственный класс обертки, который использует внешний ассемблер для компиляции кода. Так, Вы потенциально выписали бы блок в файл, использовать Платформу.NET для вращения нового процесса, который выполняет ассемблерную программу, и затем используйте Систему. IO для открытия сгенерированного файла ассемблером для вытаскивания потока байтов.

Однако, даже если бы Вы делаете все это, я был бы высоко удивлен, не сталкиваетесь ли Вы тогда с проблемами безопасности. Введение исполняемого кода в совершенно другой процесс становится все меньше и меньше возможным с каждой новой ОС. С Vista я полагаю, что Вам определенно отказать. И даже в XP, я думаю, что Вы получили бы исключение доступа запрещен при попытке записать в память другого процесса.

, Конечно, который поднимает вопрос того, почему необходимо сделать это. Конечно, там получен, чтобы быть лучшим путем:).

1
ответ дан 30 November 2019 в 08:48
поделиться
0
ответ дан 30 November 2019 в 08:48
поделиться

Я думаю, что Вы были бы лучшими от записи собственного Win32 dll. Можно тогда записать функцию в ассемблере, который экспортируется из dll. Можно тогда использовать C# для динамичного соединения с dll.

Это - не совсем то же как передающий в строке и возвращающий массив байтов. Чтобы сделать это, Вам был бы нужен x86 ассемблерный компонент или обертка вокруг masm.exe.

0
ответ дан 30 November 2019 в 08:48
поделиться

я не знаю, является ли это то, как это работает, но Вы могли просто shellexecute внешний компилятор, тогда загружающий объект, сгенерированный в Вашем массиве байтов.

0
ответ дан 30 November 2019 в 08:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: