Hello,
I have a nasty problem which already has given me quiet some headache.
Before I explain my problem please look at this code:
foreach (Instruction ins in MethodDef.Body.Instructions) // Loop from first
Instruction to the last instruction
{
if (string.Format("{0:X}", ins.Offset).ToString() ==
currentoffset) // Find my call (works!)
{
editor.Replace(ins, Instruction.Create(OpCodes.Ldstr,
decryptedstring)); // replace with an ldstr Instruction (works!)
// Now loop back from the Replaced call Instruction in
inverse order.
// Go from the Replaced call backwards as long as the
intruction before is not a call on.
// if its not a call one, then nop the instruction...
if (ins.Next.OpCode != OpCodes.Call) // Never is true even
if I replace != with == why is that?
{
Console.WriteLine("Can be nop'ed"); // This code is
never getting executed... ? (but the isntruction before the call is
// definitly not a call instruction, so it should
normally get nop'ed?
}
}
}
So what I am doing is looping through the Instructions of a method.
On a specific call which I identify by the Offset I replace the call with an
ldstr instruction. So far so good.
But now what I want to do (and am not able to get it) is this:
When the call has been replaced with the ldstr I want to start going stepwise
back through the instructions.
Meaning: first i 've looped from the first instruction till my call. Now I want
to go back stepwise and every time the opcode before the current one is !=
Opcodes.Call I want to nop it. Then after nopping I go one more step back and
do the same check and hop if its not a call opcode. I want to do that until I
hit an CallOpcode.
Then I want to exit the loop.
So to visualize it it could look like that:
(Before manipulation)
Call some stuff
LDC.i4
Ldc.i4
Add
LD.i4
Sub
Call my specific method i've identified.
So first I loop down and replace my call, which will then look like this:
Call some stuff
LDC.i4
Ldc.i4
Add
LD.i4
Sub
Ldstr - replaced call
And now I want to go stepwise up (inverse if the first loop) and hop every
opcode till I hit a Call OpCode.
The result would then look like this:
Call - some stuff
Nop
Nop
Nop
Nop
Nop
Nop
Ldstr - replaced call.
I am already trying to do this for a long time now already but I just can't get
it .
Would be very helpful if someone can explain why its not working and maybe show
me some code sample or correct my code.
That would really help me out.
I hope I've explained my situation so you can understand it. If something is
unclear from.my explanation please ask me;)
--
--
--
mono-cecil
---
You received this message because you are subscribed to the Google Groups
"mono-cecil" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.