.java文件的話,非項(xiàng)目那種單篇幅的源代碼需要先進(jìn)行編譯,生成.class文件可以在命令控制臺(tái)下用java 文件名 進(jìn)行運(yùn)行,編譯java文件需要javac.exe程序 應(yīng)該是jdk中的工具,所以你需要下載jdk并配置環(huán)境變量,然后在控制臺(tái)運(yùn)行javac編譯源文件所在目錄下的java文件,會(huì)在本目錄下生成一個(gè)同名的.class文件
十余年的碾子山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整碾子山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“碾子山網(wǎng)站設(shè)計(jì)”,“碾子山網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
(沒(méi)有報(bào)錯(cuò)的情況下) ,然后運(yùn)行java 文件名 即可運(yùn)行該代碼(前提是你這篇文件需要有main方法)。
此代碼注入非依賴注入,是hack里的?代碼注入
場(chǎng)景是這樣滴:
機(jī)器上有一個(gè)java進(jìn)程,我不想停止它,但我想把一段代碼植入進(jìn)去,干
一些事情(獲取一些信息,改變一些值,監(jiān)控一些東西,或者其它猥瑣的事情)
這個(gè)進(jìn)程不能停,而且也沒(méi)有預(yù)料到現(xiàn)在的事情,或者這個(gè)進(jìn)程的代碼完全不能修改。
好,這篇文章是要干這個(gè)事情,它基于?jvm的?jdi或者jvmti?接口
這里用的jvmti,jdi也可以,麻煩不少
應(yīng)該jdk1.5?就有,需要用c寫(xiě)。1.6?支持另一種方式,java也可以寫(xiě)
以前做過(guò)類似的事情,代碼找不到了,現(xiàn)在有實(shí)現(xiàn)了一番。
直接上代碼:
被注入的代碼是這樣滴:
while(true) {
System.out.println(System.currentTimeMillis());
Thread.sleep(1000);
}
每隔一秒輸出當(dāng)前時(shí)間,只是示意用。不管什么java程序都行
我要注入的類,那個(gè)方法是固定的:
package com.zms.inject;
import java.lang.instrument.Instrumentation;
public class MyAgent1 {
public static void premain(String s) {
premain(s, null);
}
public static void premain(String s, Instrumentation instru) {
System.out.println("I'm injected! 木哈哈哈哈哈");
System.out.printf("param: %s\n", s);
}
public static void agentmain(String args, Instrumentation inst) {
premain(args, inst);
}
public static void agentmain(String args) {
premain(args);
}
}
編譯,打入jar包
MANIFEST.MF
Manifest-Version:?1.0
Created-By:?1.6.0_26?(Apple?Inc.)
Agent-Class:?com.zms.inject.MyAgent1
Premain-Class:?com.zms.inject.MyAgent1
操作代碼:
import com.sun.tools.attach.*;
import com.sun.tools.attach.spi.AttachProvider;
VirtualMachine vm=VirtualMachine.attach("24862"); //target java process pid
System.out.println(vm);
vm.loadAgent("/Users/zms/workspace/mt/out/production/agent1.jar","Powered by zms!");
Thread.sleep(1000);
vm.detach();
目標(biāo)程序結(jié)果:?
1317283652520
1317283653520
1317283654521
I'm?injected!?木哈哈哈哈哈
param:?Powered?by?zms!
1317283655521
1317283656522
用記事本寫(xiě)完代碼后運(yùn)行方法如下:
1、用瀏覽器打開(kāi)用記事本編寫(xiě)的代碼
新建“文本文檔”后,鼠標(biāo)右鍵點(diǎn)擊該文本文檔,在菜單欄的“打開(kāi)方式”選擇“用記事本打開(kāi)”,也可以設(shè)置默認(rèn)打開(kāi)方式為“記事本”;用記事本打開(kāi)文本文檔后,直接在該文檔內(nèi)根據(jù)自己的需要輸入想要編輯的網(wǎng)頁(yè)代碼。
2、記事本寫(xiě)java代碼怎么運(yùn)行
首先,需要安裝jdk并配置環(huán)境變量。然后,在命令行中,用javac命令編譯用記事本編寫(xiě)的代碼。下一步,在命令行中,用java命令執(zhí)行編譯后的結(jié)果。
代碼是什么
代碼是程序員用開(kāi)發(fā)工具所支持的語(yǔ)言寫(xiě)出來(lái)的源文件,是一組由字符、符號(hào)或信號(hào)碼元以離散形式表示信息的明確的規(guī)則體系。代碼設(shè)計(jì)的原則包括唯一確定性、標(biāo)準(zhǔn)化和通用性、可擴(kuò)充性與穩(wěn)定性、便于識(shí)別與記憶、力求短小與格式統(tǒng)一以及容易修改等。
計(jì)算機(jī)源代碼最終目的是將人類可讀文本翻譯成為計(jì)算機(jī)可執(zhí)行的二進(jìn)制指令,這種過(guò)程叫編譯,它由通過(guò)編譯器完成。源代碼就是用匯編語(yǔ)言和高級(jí)語(yǔ)言寫(xiě)出來(lái)的地代碼。目標(biāo)代碼是指源代碼經(jīng)過(guò)編譯程序產(chǎn)生的能被 cpu直接識(shí)別二進(jìn)制代碼。
可執(zhí)行代碼就是將目標(biāo)代碼連接后形成的可執(zhí)行文件,當(dāng)然也是二進(jìn)制的。
當(dāng)前題目:java代碼注入運(yùn)行 javabean注入
轉(zhuǎn)載來(lái)于:http://sd-ha.com/article18/dojscdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、虛擬主機(jī)、移動(dòng)網(wǎng)站建設(shè)、定制開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)