Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Помогите с msil  [new]
FreeBard
Member

Откуда:
Сообщений: 218
Есть такой код в сборке

  .method public hidebysig specialname instance class Class1072 
          get_License() cil managed
  {
    // РǬƠ ʮĠ:       70 (0x46)
    .maxstack  2
    .locals init (valuetype [mscorlib]System.DateTime V_0)
	
	
    IL_0000:  ldarg.0
    IL_0001:  br.s       IL_0008

    IL_0003:  brfalse.s  IL_0039

    IL_0005:  ldarg.0
    IL_0006:  br.s       IL_000f

    IL_0008:  ldfld      class Class1072 Class1073::m_license
    IL_000d:  br.s       IL_0003

    IL_000f:  ldflda     valuetype [mscorlib]System.DateTime Class1073::m_licenseLastUpdateTime

    IL_0014:  br.s       IL_0030

    IL_0016:  call       valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
    IL_001b:  br.s       IL_0026

    IL_001d:  ldloca.s   V_0
    IL_001f:  call       instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Date()
    IL_0024:  br.s       IL_0029
    ...


Хочу увеличить дату(поле типа DateTime) Class1073::m_licenseLastUpdateTime, добавляю код(выделил красным), нормально собирается ilasm,
но при выполнении выбрасывает с исключением, произошла ошибка и тд..
Скорее всего что то не со стеком, подскажите как сделать правильно

.method public hidebysig specialname instance class Class1072
get_License() cil managed
{
// РǬƠ ʮĠ: 70 (0x46)
.maxstack 2
.locals init (valuetype [mscorlib]System.DateTime V_0)

IL_0000: ldarg.0
IL_0001: br.s IL_0008

IL_0003: brfalse.s IL_0039

IL_0005: ldarg.0
IL_0006: br.s IL_000f

IL_0008: ldfld class Class1072 Class1073::m_license
IL_000d: br.s IL_0003

IL_000f: ldflda valuetype [mscorlib]System.DateTime Class1073::m_licenseLastUpdateTime
IL_00057: ldc.r8 10000
IL_00058: call instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::AddDays(float64)
IL_00059: stfld valuetype [mscorlib]System.DateTime Class1073::m_licenseLastUpdateTime

IL_0014: br.s IL_0030

IL_0016: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_001b: br.s IL_0026

IL_001d: ldloca.s V_0
IL_001f: call instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Date()
IL_0024: br.s IL_0029
...
7 окт 17, 18:29    [20851097]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с msil  [new]
FreeBard
Member

Откуда:
Сообщений: 218
Немного подумал и добавил очистку стека и загрузку нового значения поля m_licenseLastUpdateTime
но все равно не работает

    IL_000f:  ldflda     valuetype [mscorlib]System.DateTime Class1073::m_licenseLastUpdateTime
    IL_00057: ldc.r8 10000
	IL_00058: call instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::AddDays(float64)
    IL_00059: stfld valuetype [mscorlib]System.DateTime Class1073::m_licenseLastUpdateTime	
        pop
	pop
	pop
	ldflda     valuetype [mscorlib]System.DateTime Class1073::m_licenseLastUpdateTime
7 окт 17, 18:46    [20851132]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с msil  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1612
А есть смысл увеличивать дату апдейта?

Я бы поискал это
class Class1072 Class1073::m_license

и посмотрел что там проверяется.
В большинстве случаев там стоит какое-то вычитание и сравнение с целым, напримре 14 или 30 и т.д.. вот его ставим один раз в 30000, это намного проще, и больше не колбасимся
9 окт 17, 11:48    [20853953]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с msil  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1612
И еще бы проанализировал, возможно в этом же методе что-то можно исправить
9 окт 17, 11:50    [20853966]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с msil  [new]
Изопропил
Member

Откуда:
Сообщений: 30671
почему дизассембировано в MSIL, а не c# ?
9 окт 17, 11:54    [20853976]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с msil  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1612
Приведите весь код метода get_License()
9 окт 17, 12:00    [20854001]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить