亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java與匯編的混合操作類庫及示例

系統 2341 0


關于本例:


首先聲明一下,這是一個副產品,暫定名叫LocalOS.寫它的起因在于放假時去親戚家串門,腦袋一熱答應了下星期幫親戚孩子做個游戲外掛,誰讓國人都喜歡認為[IT人士]就是舉凡和計算機有關的都會的人(而且不分軟硬|||)。因為沒寫過外掛,手里沒有相關類庫,所以用什么寫都一樣,嫌分析封包麻煩并且也沒時間,本想用Java寫個匯編類,然后調用游戲本身指令進行掛機.目的有二:一是為了鞏固相關的Java和匯編知識,二是強調下在軟件世界中,Java能做什么并不是問題,Java不能做什么才是問題。

但事實上看,今天我回家后發覺一邊寫Java匯編的基礎類庫一邊分析游戲做外掛似乎不趕趟|||,所以暫時放棄Java開發,直接用VB做界面,C++寫核心了.

暫時把寫了一部分的Java執行匯編指令例子丟出來,等有時間再繼續,順便希望有人能幫我把類庫補全.

以下是剛寫的這個類庫的演示用例,發完了我就準備睡覺了~~~一不留神都這時候了~~~~明天上班還有事呢||||||||

目前提供的系統接口類:

  1. package org.loon.framework.os;
  2. /**
  3. *Copyright2008
  4. *
  5. *LicensedundertheApacheLicense,Version2.0(the"License");youmaynot
  6. *usethisfileexceptincompliancewiththeLicense.Youmayobtainacopyof
  7. *theLicenseat
  8. *
  9. *http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
  12. *distributedundertheLicenseisdistributedonan"ASIS"BASIS,WITHOUT
  13. *WARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.Seethe
  14. *Licenseforthespecificlanguagegoverningpermissionsandlimitationsunder
  15. *theLicense.
  16. *
  17. *@projectloonframework
  18. *@authorchenpeng
  19. *@email:ceponline@yahoo.com.cn
  20. *@version0.1
  21. */
  22. class Kernel{
  23. static {
  24. System.loadLibrary( "localos" );
  25. }
  26. /**
  27. *獲得內聯匯編執行結果
  28. *
  29. *@paramasmBytes
  30. *@return
  31. */
  32. public native static long doResult( final byte []asmBytes);
  33. /**
  34. *將內聯匯編動態注入指定進程
  35. *
  36. *@parampid
  37. *@paramasmBytes
  38. *@return
  39. */
  40. public native static boolean doInject( final int pid, byte []asmBytes);
  41. /**
  42. *寫指定線程內存
  43. *
  44. *@parampid
  45. *@paramaddress
  46. *@parambuffer
  47. *@paramsize
  48. *@paramnumberOfBytesWrite
  49. *@return
  50. */
  51. public native static boolean writeProcessMemory( final int pid,
  52. final int address, final byte []buffer, final int size,
  53. final int []numberOfBytesWrite);
  54. /**
  55. *讀指定線程內存
  56. *
  57. *@parampid
  58. *@paramaddress
  59. *@parambuffer
  60. *@paramsize
  61. *@paramnumberOfBytesWrite
  62. *@return
  63. */
  64. public native static boolean readProcessMemory( final int pid,
  65. final int address, final byte []buffer, final int size,
  66. final int []numberOfBytesWrite);
  67. /**
  68. *讀指定線程內存
  69. *
  70. *@parampid
  71. *@paramaddress
  72. *@return
  73. */
  74. public static byte readProcessMemory( final int pid, final int address){
  75. byte []buffer= new byte [ 1 ];
  76. int []numberOfBytesRead= new int [ 1 ];
  77. readProcessMemory(pid,address,buffer, 1 ,numberOfBytesRead);
  78. return buffer[ 0 ];
  79. }
  80. /**
  81. *以指定的訪問方法進入一個已存在的進程
  82. *
  83. *@parammode
  84. *@parampid
  85. *@return
  86. */
  87. public native static int openProcess( final int mode, final int pid);
  88. /**
  89. *強制結束指定進程
  90. *
  91. *@parampid
  92. *@return
  93. */
  94. public native static boolean killProcessID( final int pid);
  95. /**
  96. *檢查指定進程是否在運行中
  97. *
  98. *@parampid
  99. *@return
  100. */
  101. public native static boolean isProcessRunning( final int pid);
  102. /**
  103. *返回當前進程中所有程序名
  104. *
  105. *@return
  106. */
  107. public native static Object[]getProcessNames();
  108. /**
  109. *返回指定程序名的唯一進程id
  110. *
  111. *@paramprocessName
  112. *@return
  113. */
  114. public native static int getProcessID( final StringprocessName);
  115. }


示例代碼:
  1. package org.loon.test;
  2. import org.loon.framework.os.ASM;
  3. /**
  4. *Copyright2008
  5. *
  6. *LicensedundertheApacheLicense,Version2.0(the"License");youmaynot
  7. *usethisfileexceptincompliancewiththeLicense.Youmayobtainacopyof
  8. *theLicenseat
  9. *
  10. *http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. *Unlessrequiredbyapplicablelaworagreedtoinwriting,software
  13. *distributedundertheLicenseisdistributedonan"ASIS"BASIS,WITHOUT
  14. *WARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.Seethe
  15. *Licenseforthespecificlanguagegoverningpermissionsandlimitationsunder
  16. *theLicense.
  17. *
  18. *@projectloonframework
  19. *@authorchenpeng
  20. *@email:ceponline@yahoo.com.cn
  21. *@version0.1
  22. */
  23. public class TestASM{
  24. /**
  25. *格式化輸出信息
  26. *
  27. *@parammes
  28. *@parama
  29. *@paramb
  30. *@return
  31. */
  32. public static StringformatMessage(Stringmes, int a, int b){
  33. Integera1= new Integer(a);
  34. Integerb1= new Integer(b);
  35. return String.format(mes, new Object[]{a1,b1});
  36. }
  37. /**
  38. *java進行匯編加法
  39. *
  40. *@paramasm
  41. *@parama
  42. *@paramb
  43. *@return
  44. */
  45. public static void plus(ASMasm, int a, int b){
  46. asm._MOV_EAX(a);
  47. asm._ADD_EAX(b);
  48. asm._RET();
  49. Stringmes=formatMessage( "Java進行匯編加法計算%d+%d=" ,a,b);
  50. System.out.println(mes+asm.doResult());
  51. }
  52. /**
  53. *java進行匯編減法
  54. *
  55. *@paramasm
  56. *@parama
  57. *@paramb
  58. */
  59. public static void minus(ASMasm, int a, int b){
  60. asm._MOV_EAX(a);
  61. asm._SBB_EAX(b);
  62. asm._RET();
  63. Stringmes=formatMessage( "Java進行匯編減法計算%d-%d=" ,a,b);
  64. System.out.println(mes+asm.doResult());
  65. }
  66. /**
  67. *java進行匯編乘法
  68. *
  69. *@paramasm
  70. *@parama
  71. *@paramb
  72. */
  73. public static void multiply(ASMasm, int a, int b){
  74. asm._MOV_EAX(a);
  75. asm._MOV_EBX(b);
  76. asm._IMUL_EAX_EBX();
  77. asm._RET();
  78. Stringmes=formatMessage( "Java進行匯編乘法計算%d*%d=" ,a,b);
  79. System.out.println(mes+asm.doResult());
  80. }
  81. /**
  82. *java進行匯編除法
  83. *
  84. *@paramasm
  85. *@parama
  86. *@paramb
  87. */
  88. public static void divide(ASMasm, int a, int b){
  89. asm._XOR_EDX_EDX();
  90. asm._MOV_EAX(a);
  91. asm._MOV_ECX(b);
  92. asm._IDIV_ECX();
  93. asm._RET();
  94. Stringmes=formatMessage( "Java進行匯編除法計算%d/%d=" ,a,b);
  95. System.out.println(mes+asm.doResult());
  96. }
  97. public static void main(String[]args){
  98. //PS:ASM類中不是所有匯編指令都有,因為太多,有時間再慢慢加.已寫的不保證全部正確|||.
  99. //添加ASM類的方法大體有三種:
  100. //1、用匯編指令名和操作碼自己一個個對
  101. //2、自己寫匯編,然后debug讀操作碼
  102. //3、開OD之類的反匯編~
  103. //反正所有匯編命令都能實現,關鍵看有沒有恒心,誰有空幫忙寫下……
  104. ASMasm= new ASM();
  105. //加法測試
  106. plus(asm, 65657632 , 95454157 );
  107. //減法測試
  108. minus(asm, 996565 , 12345 );
  109. //乘法測試
  110. multiply(asm, 1841 , 2009 );
  111. //除法測試
  112. divide(asm, 19820901 , 12 );
  113. }
  114. }

運行效果圖如下:



大家用腳趾頭都能猜出來是JNI實現的,畢竟和系統本地交互不用JNI是不可能的,目前僅支持Windows系統.不過在當今的Java世界中,由于SWT已經提供了良好的本地環境庫支持,事實上用它便可以直接寫出大多數系統與Java的匯編混合代碼,但這與本例無關,自己琢磨吧,我安息了:)

CSDN下載地址 http://download.csdn.net/source/940199

下載地址: http://code.google.com/p/greenvm/downloads/list (暫時先丟這上面 源碼在Jar內 )

OD(ollydbg,傳說中的匯編分析調試工具)下載地址: http://download.csdn.net/source/940795


Java與匯編的混合操作類庫及示例


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日本俄罗斯一级毛片 | 五月天亚洲 | 免费视频爱爱太爽了 | 亚洲图片综合区 | 免费观看一级特黄欧美大片 | 99视频精品在线 | 青青草国产免费一区二区 | 第一序列番外篇在哪里看 | 91成人在线免费视频 | 国产美女久久精品香蕉69 | 亚洲国产精品线观看不卡 | 久久精品最新免费国产成人 | 日本香蕉视频在线观看 | 中文视频在线 | 国产在线观看不卡 | 免费一级淫片 | 国产成在线人视频免费视频 | 九九成人| 色播综合| 91麻豆精品一二三区在线 | 久久午夜影视 | 伊人精品网 | 久久综合玖玖爱中文字幕 | 亚洲精品国产一区二区三 | 国产精品99久久久久久小说 | 综合色播| 九九热精品免费 | 国产第一页福利 | 国产黄色91| 欧美精品色视频 | 操久久久| 老司机午夜免费影院 | 99久久99久久久精品齐齐鬼色 | 亚洲国产精品一区二区久久 | 久草青草| 天堂va亚洲va欧美va国产 | 国产午夜亚洲精品久久999 | 免费一级特黄欧美大片久久网 | 国产激情视频在线 | 成人国产在线不卡视频 | 亚洲看片|