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