Android 台灣中文網

標題: 修改Assembly-CSharp的疑問 [打印本頁]

作者: e0ru8jo    時間: 2016-10-2 11:26
標題: 修改Assembly-CSharp的疑問
修改Assembly-CSharp的時候
一般來說入門應該就只是利用.NET Reflector+reflexil,或者ildasm,弄出IL
改改個參數然後存個檔(以前有篇文章是白貓那邊發出來的)

因為一些遊戲大神不再更新,想要嘗試自己更改
我自己本身也就只會改參數而已...
但是解開來看,好不容易找到他們修改的地方
(許多修改者貌似都會打亂程式碼,這個是用甚麼軟體辦到的阿XD)
原本是
// Code size       12 (0xc)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance class PlayerData BattleCardBase::get_PlayerData()
    IL_0006:  callvirt   instance int32 CardBaseData::GetAtk()
    IL_000b:  ret

但是我看他改成這樣
// Code size       46 (0x2e)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  callvirt   instance bool BattleCardBase::get_PlayerHere()
    IL_0006:  brtrue     IL_000d

    IL_000b:  ldc.i4.0
    IL_000c:  ret

    IL_000d:  ldarg.0
    IL_000e:  call       instance class PlayerData BattleCardBase::get_PlayerData()
    IL_0013:  callvirt   instance int32 CardBaseData::GetAtk()
    IL_0018:  newobj     instance void [mscorlib]System.Random::.ctor()
    IL_001d:  ldc.i4     0x32
    IL_0022:  ldc.i4     0x64
    IL_0027:  callvirt   instance int32 [mscorlib]System.Random::Next(int32,
                                                                      int32)
    IL_002c:  mul
    IL_002d:  ret


這時候我用IL直接去Notepad++修改存檔,包不回去dll
但是用.NET Reflector,我也不知道他是怎麼reflexil新增出來這麼多的
看il指令看起來他自己也有新增函數的樣子,例如get_PlayerHere()
這個我也不知道他是如何用.NET Reflector加進去

有沒有大神能夠提供進階教學,或者....哪邊可以學習

題外話.NET Reflector可以用C#去觀看
那他有辦法直接去修改程式碼在包回去嗎?
貌似修改都是要靠reflexil,不能直接動程式碼
假設以後要新增好幾行程式碼,那有沒有方便的方式

作者: william8888    時間: 2016-10-2 11:52
應該是用 ilasm 將 il 包回 dll. 有安裝 .net 套件應該會有 ilasm 這工具

似乎並非新增函數, 是呼喚另一個函數, 在 BattleCardBase 內有一函數叫 "get_PlayerHere", 試試在 BattleCardBase 內找找

至於修改, 似乎不是用 reflexil, 應該是用類似 notepad 的文字編輯器, 然後用 ilasm 包回 dll.

用 c# 觀看, 只是 "觀看" 用途, 最後還是要用 il 方式修改.
作者: mn1    時間: 2016-10-2 12:13
你用ildasm反編譯出來有 xxxxx.res 的這檔嗎?
作者: e0ru8jo    時間: 2016-10-2 15:25
william8888 發表於 2016-10-2 11:52
應該是用 ilasm 將 il 包回 dll. 有安裝 .net 套件應該會有 ilasm 這工具

似乎並非新增函數, 是呼喚另一個 ...

在原版是沒有get_PlayerHere的函數
但是在修改版裡面有,所以我推測是作者自己新增的

我原本就是用notepad在修改,但是不曉得為何就是無法用ilasm包回去dll
他說有錯誤,在想是不是因為學那位作者修改的時候,遺漏了什麼函數QQ
如果只是修改參數是可以包的回去,但是如果是像這位作者一樣新增多行,就包不回去ˊ口ˋ

可惜了,還以為有甚麼方是可以方便直接程式碼修改

作者: e0ru8jo    時間: 2016-10-2 15:26
mn1 發表於 2016-10-2 12:13
你用ildasm反編譯出來有 xxxxx.res 的這檔嗎?

有的,不過我有記得下res的指令
我正常自己修改是包的回去

但是如內文那樣修改,我就包不回去了= =




歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1