У меня есть следующий код C #, который я скомпилировал в Linux с моно,
и я хочу пошагово свои команды CIL. В частности,
Я хочу иметь возможность проверить стек,
и увидеть значения, выдвинутые и извлеченные из него.
using System;
namespace ARITH
{
class MUL
{
static void Main()
{
int i = 742;
int j = 999;
if (i*j == 15242)
{
Console.WriteLine("MMMM");
}
}
}
}
Как я могу пошагово сгенерировать CIL-код внутри main?
Вот сгенерированный CIL основной функции:
$ mcs main.cs
$ monodis main.exe > main.cil
$ sed -n '37,60p;61q' main.cil
.method private static hidebysig
default void Main () cil managed
{
// Method begins at RVA 0x2058
.entrypoint
// Code size 36 (0x24)
.maxstack 2
.locals init (
int32 V_0,
int32 V_1)
IL_0000: ldc.i4 742
IL_0005: stloc.0
IL_0006: ldc.i4 999
IL_000b: stloc.1
IL_000c: ldloc.0
IL_000d: ldloc.1
IL_000e: mul
IL_000f: ldc.i4 15242
IL_0014: bne.un IL_0023
IL_0019: ldstr "MMMM"
IL_001e: call void class [mscorlib]System.Console::WriteLine(string)
IL_0023: ret
} // end of method MUL::Main
EDIT:
После sudo apt install sdb
я подготовил простой скрипт, чтобы
Я правильно понял команды, и действительно следующий скрипт выводит правильные значения для локальных переменных i
и j
:
$ cat sdbCommands.txt
bp add func ARITH.MUL.Main
r main.exe
step
step
step
step
print i
print j
$ sdb -f sdbCommands.txt
Однако я до сих пор не могу найти эквивалент stepi
GDB. То есть для перехода на уровень CIL ...