For .net there's SOS.dll and WinDbg. You can find versions, for each version of installed .NET frameworks, in sub-folders in
%SYSTEMROOT%\Microsoft.NET\Framework\. You can load it into WinDbg by typing
.load and the full path to the SOS dll.
!name2ee to get the method table of class,
!dumpmt to dump the method table,
!dumpmd to dump the method descriptor for the method you want to look at, CodeAddr is the address of the JITed code, and finally
!U to disassemble the code address.
Here's a link to a blog describing the process.
I'm actually not sure what you'd gain from attacking the JIT-compiled code though since it's almost always the case that the source VM is simpler and heavily type annotated. It's almost always easier to attack the intermediate language. The only reason I can think of is if you want to use the optimizations of the JIT to eliminate obfuscation. Even then it's probably easier to apply the optimization passes to the intermediate language. I suppose there's also the case when you want to massage the JIT code such that it can be reused in some sort of exploit.
Am I misunderstanding the question?