Where is the entry point of java calls
Colin(Du Li)
dawn2004 at gmail.com
Wed Mar 4 13:38:21 PST 2009
Hi, Karen,
Thanks a lot!
It really helps!
Colin.
Karen Kinnear wrote:
>
> Colin,
>
> Let's start with reading the bytecodes. You have a .class file.
> Run javap -c Main > Main.jasm to get the bytecodes from Main.class
> - now you can view the translated generated bytecodes using your
> favorite editor (read, not modify)
>
> In the sample I looked at, in which there was a
> private native Class myNative(args)
>
> in the bytecodes for the caller, there was the instruction:
> invokespecial #83; // Method myNative:(...signature for args)
>
> #83 refers to the constant pool entry #83
>
> See java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html
> Look in section 4.1 for details on the class file format.
>
> 2. Method invocation should use one of: invokevirtual/special/static/
> interface
> so find that bytecode in your generated code. You can put a breakpoint
> in
> the interpreter you are debugging - for when it checks for a native
> method call.
>
> good luck,
> Karen
>
> On Mar 4, 2009, at 1:36 PM, Colin(Du Li) wrote:
>
>>
>> Hi, Karen,
>>
>> Thanks for your prompt reply!
>> What I wanna do is to trap all the java method call, and pick out
>> the native
>> calls (JNI). I still have two questions.
>> 1. How can I read the generated bytecodes. When I use Vi to open
>> a .class
>> file, it's not very readable.
>> 2. Does every method call for another java method can be trapped at
>> invoke_virtual/special/static in bytecodeInterpreter.cpp?
>>
>> Thanks again.
>>
>> Colin.
>>
>> Karen Kinnear wrote:
>>>
>>> Colin,
>>>
>>> We don't use javaCalls for calls from one java method to another.
>>> I believe you are writing an interpreter (or modifying the C++
>>> interpreter)?
>>> So you want to look at the code you generated - which will invoke
>>> java methods directly. See the bytecodes for invoke_virtual/special/
>>> interface.
>>>
>>> hope this helps,
>>> Karen
>>>
>>> On Mar 4, 2009, at 12:53 PM, Colin(Du Li) wrote:
>>>
>>>>
>>>> Hi, guys.
>>>> Could anyone help me ? Or do I need express my question more
>>>> clearly?
>>>> I really need help for this question.
>>>> Thanks a lot!
>>>>
>>>> Colin
>>>>
>>>> Colin(Du Li) wrote:
>>>>>
>>>>> Hello,
>>>>> My question is where is the entry point of java calls in hotspot.
>>>>> If I have a simple application as follow:
>>>>>
>>>>> public class HelloWorld{
>>>>> public static void main(String[] args){
>>>>> hello2();
>>>>> }
>>>>> public static void hello2(){
>>>>> System.out.println("hello 2.");
>>>>> }
>>>>> }
>>>>>
>>>>> If I observe at javaCalls:call_helper(), I can only see method
>>>>> HelloWorld.main(), I cannot see method HelloWorld.hello2(). Why?
>>>>> and How
>>>>> can I find the entry point of method HelloWorld.hello2()?
>>>>>
>>>>> Thanks a lot!
>>>>>
>>>>> Colin
>>>>>
>>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Where-is-the-entry-point-of-java-calls-tp22298233p22335492.html
>>>> Sent from the OpenJDK Hotspot Virtual Machine mailing list archive
>>>> at Nabble.com.
>>>>
>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Where-is-the-entry-point-of-java-calls-tp22298233p22336385.html
>> Sent from the OpenJDK Hotspot Virtual Machine mailing list archive
>> at Nabble.com.
>>
>
>
>
--
View this message in context: http://www.nabble.com/Where-is-the-entry-point-of-java-calls-tp22298233p22339955.html
Sent from the OpenJDK Hotspot Virtual Machine mailing list archive at Nabble.com.
More information about the hotspot-dev
mailing list