Cfplsql导出可执行文件件是哪个文件

MAC系统中可执行文件格式(Mach-O)的学习&(三)
书接上回,上回已经遍历了符号表。现在就把后续的一些数据结构综合上符号表做一个简要的说明,有一些问题可能还没有想明白,想透彻,会慢慢补充。
&先来说一下符号表,这个结构和Windows的导出导入表的概念不同,只是一个所有符号的参考表。它包括很多类型,主要分两部分,第一部分是调试符号,包括了哪些源文件,哪些中间文件,哪些包含的头文件,以及有的函数,静态函数,数据,全局函数数据等等。第二部分是一个真正的符号表,特别是其中函数部分很重要,后面的dysymtab_command会引用这里的表项。这里的符号又分很多种,它包括函数和数据,其中数据基本是已经确定虚拟地址位置,所带的虚拟地址偏移指向文件后面的数据区段,在common和bss节中。而函数则分两种,带地址和不带地址。带地址的都指向代码段。按访问类型又分为,non-external,
private external, 和external三种。
non-external的有___cxx_global_var_init
后两种我经过分析,好像inline的就会变成private
external,其他的函数是external,这些应该对应于外部可见性。这些都是有地址的。最后一种也是最关键的,是不带地址的,undefined.这些符号就是以前讲的导入表的内容。和Windows不同,MAC导入表分两部分,这里只有导入函数的名字。而导入库的名字由文件中后面的dylib_command来决定。并且结合rpath,实现一些库的动态,就是库的名字不是全路径(Windows上Default都是没有路径的,MAC上可以带有路径),dylinker_command所指示的dyld库就是一个带全路径的。因为需要先加载它,然后由它才能实现所谓的动态链接的工作。MAC把Windows上,PE
Loader的程序,放在了用户态,由dyld库来完成。
&真正Dyld要触及的主要结构应该是dysymtab_command结构。这个结构本身很呆萌,放那没撒用。它是做为一个中间人,联系了节区和符号表。有一些基本信息记录了符号表中,包括一共有多少local表项(包括所有的non-external符号),多少external符号和多少未定义符号。
&接下来是最重要的部分了,这个中间人建立了从各个节表到符号表的关联关系,以及运行时调用关系。
&每个节中有N个数据,并在节的reserved1字段中记录了它们在dysymtab_command结构中indirectsymoff字段所对应的起始项。
&举例说明,桩(Stub)表有5个数据,每个数据是6个字节(记录在节的reserved2)字段。这个节的长度是5*6=30个字节。__got
__nl_symbol_ptr __la_symbol_ptr
分别代表全局偏移节,非延迟加载节,延迟加载节。它们的节中所记录节的reserved2是0。需要用节长度除以指针长度来得到项数。现在假定分别是2
3 4项数据。那么dysymtab_command结构中indirectsymoff字段所对应的起始位置和长度算出来的项数应该是5+2+3+4=14项。上面四个节中reserved1对应的就是0,5,7,10这四个数。第一个节对应间接符号表项的第0-4项,共5个,全局节对应5,6两项,共2项。非延迟对应7
8 9 三项,延迟对应 10 11 12 13四项。
&而间接表中每一项都是4个字节的索引,它们就是符号表中符号的索引。这样建立了从各个节中每项数据到符号表中的引用。比如,Stub的第一项,对应了间接表中的第1项,假设该项的值为25,那么就是第一个桩柱项对应了第25个符号表中的项。
& &先用下面的命令看看各节的特性
chenconodeskcom:~ chencon$ size -m -l -x
/Users/chencon/Desktop/Conan/ABIReader/data/Neutron&
Segment __PAGEZERO: 0x (vmaddr 0x0 fileoff 0)
Segment __TEXT: 0x12000 (vmaddr 0x fileoff 0)
Section __text: 0x5c95 (addr 0x offset 30816)
Section __stubs: 0x4f2 (addr 0x offset 54518)
Section __stub_helper: 0x218 (addr 0x offset 55784)
Section __gcc_except_tab: 0x668 (addr 0x10000dc00 offset 56320)
Section __cstring: 0x5a9 (addr 0x offset 57960)
Section __const: 0x8b8 (addr 0x offset 59424)
Section __unwind_info: 0x234 (addr 0x offset 61656)
Section __eh_frame: 0x2cf0 (addr 0x offset 62224)
total 0xa78c
Segment __DATA: 0x2000 (vmaddr 0x fileoff 73728)
Section __got: 0x128 (addr 0x offset 73728)
Section __nl_symbol_ptr: 0x10 (addr 0x offset 74024)
Section __la_symbol_ptr: 0x698 (addr 0x offset 74040)
Section __mod_init_func: 0x28 (addr 0x offset 75728)
Section __const: 0x48 (addr 0x offset 75776)
Section __data: 0x7d8 (addr 0x offset 75856)
Section __common: 0x10 (addr 0x offset 0)
Section __bss: 0x208 (addr 0x offset 0)
total 0x1230
Segment __LINKEDIT: 0x19000 (vmaddr 0x fileoff 81920)
&先来看Stub节的运行特性。用下面命令反汇编桩节,只有这个是在代码区,剩下的节都是在数据区。
& &chenconodeskcom:~ chencon$
otool -s __TEXT __stubs -v
/Users/chencon/Desktop/Conan/ABIReader/data/Neutron&
/Users/chencon/Desktop/Conan/ABIReader/data/Neutron:
Contents of (__TEXT,__stubs) section
d4f6 jmpq *0x4c3c(%rip)
d4fc jmpq *0x4c3e(%rip)
d502 jmpq *0x4c40(%rip)
d508 jmpq *0x4c42(%rip)
d50e jmpq *0x4c44(%rip)
d514 jmpq *0x4c46(%rip)
d51a jmpq *0x4c48(%rip)
d520 jmpq *0x4c4a(%rip)
可以看到的是,它们都是一堆的调用指令,我们看第6项(0为第一项)
Stub code is in file offset d51a code bytes is 0xff 0x25 0x48
0x4c 0x0 0x0&
Accessing 6 symbol in indirect symbol table!
This stub is for index 1307 symbol in symbol table
Symbol name is boost::system::error_code::value() const
这个桩是为上面这个函数准备的。我们来看看它调用去哪里了。
*0x4c48(%rip)
它去的地址
是后一条指令也就是0xd520+0x4c48=0x对应一下上面的地址。可以看到它指向
__la_symbol_ptr: 0x698 (addr 0x offset
74040)延迟加载节的内容。我们来看一下内容是撒。
ktop/Conan/ABIReader/data/Neutron
/Users/chencon/Desktop/Conan/ABIReader/data/Neutron:
Contents of (__DATA,__la_symbol_ptr) section
Unknown section type (0x7)
00 00 01 00 00 00 40 81 00 00 01 00 00
00 00 01 00 00 00 50 82 00 00 01 00 00
00 00 01 00 00 00 70 82 00 00 01 00 00
00 00 01 00 00 00 20 80 00 00 01 00 00
00 00 01 00 00 00 80 8d 00 00 01 00 00
可以看到值是0x,也和我们从符号表中找到的地址一致
Show 1307 Symbol Entry
Private External Symbol boost::system::error_code::value()
&found at address 0x
End Show 1307 Symbol。
&另外发现,所有的External
Symbol都没有桩。所有的undefined符号都有桩。
&我们看一下undefined符号的例子。
Show 1725 Symbol Entry
Undefined Symbol __Unwind_Resume
&address undetermined
End Show 1725 Symbol
stub section entry 206
Stub code is in file offset d9ca code bytes is 0xff 0x25 0xd8
0x4d 0x0 0x0&
Accessing 206 symbol in indirect symbol table!
This stub is for index 1725 symbol in symbol table
Symbol name is __Unwind_Resume
lazy section entry 206
Address is 0x127a8, Content is 0x10000dbce
Accessing 456 symbol in indirect symbol table!
This stub is for index 1725 symbol in symbol table
Symbol name is __Unwind_Resume
可见,桩柱和延迟加载节都会引用不同的间接符号项,但是,这些不同的符号项的内容可能一致,也就是引用了符号表中同一个符号。
非延迟加载节中只有2项,其中一项就是最重要的dyld_stub_binder。这个是定义在dyld库中的一个地址。
最后我们来看一下,未定义符号的桩指向延迟加载区,延迟加载区的代码又指向哪里呢?0x10000dbce同样通过观察上面的节表。可以看到它在__stub_helper节中。这个节在代码段中,我们用同样的方法打印出这块的汇编代码。
chenconodeskcom:~ chencon$ otool -s __TEXT __stub_helper -v
/Users/chencon/Desktop/Conan/ABIReader/data/Neutron&
/Users/chencon/Desktop/Conan/ABIReader/data/Neutron:
Contents of (__TEXT,__stub_helper) section
d9e8 leaq 0x4741(%rip), %r11
d9ef pushq %r11
d9f1 jmpq *0x4731(%rip)
d9f8 pushq $0x0
d9fd jmp 0x
da02 pushq $0x2b
da07 jmp 0x
da0c pushq $0x4f
da11 jmp 0x
da16 pushq $0x6f
da1b jmp 0x
da20 pushq $0x92
da25 jmp 0x
da2a pushq $0xbe
da2f jmp 0x
da34 pushq $0xeb
da39 jmp 0x
da3e pushq $0x165& &
& ## imm = 0x165
da43 jmp 0x
da48 pushq $0x1aa& &
& ## imm = 0x1AA
da4d jmp 0x
da52 pushq $0x1cc& &
& ## imm = 0x1CC
da57 jmp 0x
da5c pushq $0x1f4& &
& ## imm = 0x1F4
da61 jmp 0x
da66 pushq $0x233& &
& ## imm = 0x233
da6b jmp 0x
da70 pushq $0x272& &
& ## imm = 0x272
da75 jmp 0x
da7a pushq $0x2d7& &
& ## imm = 0x2D7
da7f jmp 0x
da84 pushq $0x2f4& &
& ## imm = 0x2F4
da89 jmp 0x
da8e pushq $0x31d& &
& ## imm = 0x31D
da93 jmp 0x
da98 pushq $0x348& &
& ## imm = 0x348
da9d jmp 0x
daa2 pushq $0x373& &
& ## imm = 0x373
daa7 jmp 0x
daac pushq $0x39f& &
& ## imm = 0x39F
dab1 jmp 0x
dab6 pushq $0x3cb& &
& ## imm = 0x3CB
dabb jmp 0x
dac0 pushq $0x3f2& &
& ## imm = 0x3F2
dac5 jmp 0x
daca pushq $0x41b& &
& ## imm = 0x41B
dacf jmp 0x
dad4 pushq $0x4b9& &
& ## imm = 0x4B9
dad9 jmp 0x
dade pushq $0x4da& &
& ## imm = 0x4DA
dae3 jmp 0x
dae8 pushq $0x501& &
& ## imm = 0x501
daed jmp 0x
daf2 pushq $0x527& &
& ## imm = 0x527
daf7 jmp 0x
dafc pushq $0x549& &
& ## imm = 0x549
db01 jmp 0x
db06 pushq $0x56b& &
& ## imm = 0x56B
db0b jmp 0x
db10 pushq $0x5c0& &
& ## imm = 0x5C0
db15 jmp 0x
db1a pushq $0x614& &
& ## imm = 0x614
db1f jmp 0x
db24 pushq $0x669& &
& ## imm = 0x669
db29 jmp 0x
db2e pushq $0x6bd& &
& ## imm = 0x6BD
db33 jmp 0x
db38 pushq $0x70a& &
& ## imm = 0x70A
db3d jmp 0x
db42 pushq $0x75f& &
& ## imm = 0x75F
db47 jmp 0x
db4c pushq $0x7ac& &
& ## imm = 0x7AC
db51 jmp 0x
db56 pushq $0x7c9& &
& ## imm = 0x7C9
db5b jmp 0x
db60 pushq $0x7e6& &
& ## imm = 0x7E6
db65 jmp 0x
db6a pushq $0x7ff& &
& ## imm = 0x7FF
db6f jmp 0x
db74 pushq $0x821& &
& ## imm = 0x821
db79 jmp 0x
db7e pushq $0x83c& &
& ## imm = 0x83C
db83 jmp 0x
db88 pushq $0x85b& &
& ## imm = 0x85B
db8d jmp 0x
db92 pushq $0x874& &
& ## imm = 0x874
db97 jmp 0x
db9c pushq $0x892& &
& ## imm = 0x892
dba1 jmp 0x
dba6 pushq $0x8ad& &
& ## imm = 0x8AD
dbab jmp 0x
dbb0 pushq $0x8ca& &
& ## imm = 0x8CA
dbb5 jmp 0x
dbba pushq $0x8e7& &
& ## imm = 0x8E7
dbbf jmp 0x
dbc4 pushq $0x8fe& &
& ## imm = 0x8FE
dbc9 jmp 0x
dbce pushq $0x913& &
& ## imm = 0x913
dbd3 jmp 0x
dbd8 pushq $0x92b& &
& ## imm = 0x92B
dbdd jmp 0x
dbe2 pushq $0x941& &
& ## imm = 0x941
dbe7 jmp 0x
dbec pushq $0x951& &
& ## imm = 0x951
dbf1 jmp 0x
dbf6 pushq $0x961& &
& ## imm = 0x961
dbfb jmp 0x
我们取中间一段
dbce pushq $0x913& &
&&## imm = 0x913
dbd3 jump 0x
这个地址同样在相同的段,先压入了一个数,具体作用不明,应该是和符号相关的,没找到对应关系。
d9e8 leaq 0x4741(%rip), %r11
d9ef pushq %r11
d9f1 jmpq *0x4731(%rip)
这里又用到了相同的算法,目标地址是0xd9f7+0x4731=0x,我们来看看这个地址是哪里。
Section __nl_symbol_ptr: 0x10
(addr 0x offset 74024) 看到没,非延迟加载节。这里的就是上面提到的
non-lazy section entry 0
Address is 0x12128, Content is 0x0
Accessing 248 symbol in indirect symbol table!
This stub is for index 1842 symbol in symbol table
Symbol name is dyld_stub_binder
特别要注意的是,这里的值为0,为什么?因为dyld_stub_binder是个外部符号,由dyld实现,因此它不能知道具体是什么地址。只有当进程运行时,根据文件中动态链接命令指定的动态链接器决定(通常是dyld)以后,系统会加载动态链接器到指定进程的空间,并将后续的操作交给动态链接器来完成,这时此处的地址就真正的对应了dyld_stub_binder的地址。具体是如何完成动态链接的,我还需要继续研究dylib的格式,并结合现在的知识再看。
& 总结一下:
&调用本地符号,直接指向桩-&延迟节-&本地代码区。
&调用未定义符号,直接指向桩-&延迟节-&桩辅助节-&根据对应的符号,直接将控制权交给dyld,完成符号绑定并调用,在绑定完成之后,调用函数之前,dyld会修改延迟节的内容去对应函数真正的地址。这也就做到了一次调用,只绑定一次,后续的调用不会再进入桩辅助节的调用。因为整个过程,只有延迟节处在数据区,它是可以修改的,而桩及辅助节处于代码区,默认不能修改。
&最后还有几个问题,就是和如何绑定相关,还有在XCode中调试信息是放在文件的哪个位置,可以看得局部变量的值和类型,在函数中位置。还有就是绑定时候传入的那个神奇的参数,又到底是什么。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。手机上这些文件是什么意思,干什么的?_百度知道
手机上这些文件是什么意思,干什么的?
这些文件都什么意思;&realnews&BT&cmsbrw&&&UDX&MMS&mobileData&&&& &META-INF&Ebook&gt&lt,分别都是干什么的啊
提问者采纳
就是如何来创建这个可执行的 JAR 文件包,也可以是其它的文件名;而另一种是使用 JET 来进行 编译.jar 分别应该此命令。运行时只需要使用 java -jar test.jar 放到 CLASSPATH 中.class
如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包MANIFEST.mf 可以编辑如下,而且是可执行的类 (定义了 public static void main(String[]) 方法),就不需要这么麻烦了、包含包路径的类名:系统目录
6。但是 JET 要用钱买的.jar
运行结果与 7) 相同,即在上例中 java test:
META-INF&#47,如果使用 -m 参数并指定 manifest,一种是制作一个可执行的 JAR 文件包.mf test
运行结果与 2) 相似:
增加,META-INF意思比较复杂,因为 SUN 已经帮我们做好了.Test,对于一个可执行的 JAR 文件包.bat) 或者 Linux 的 Shell 程序:test/但是;运行时还要到控制台下去使用 java 命令来运行,再往这个 ZIP 压缩包中添加一个包含 MANIFEST 文件的 META-INF 目录即可,它们分别表示。JAR 文件非常类似 ZIP 文件——准确的说:
test,即不能创建 ZIP 文件。
在解压一个 JAR 文件的时候是不能使用 jar 的 -C 参数来指定解压的目标的,那么这个 manifest.,因为 -C 参数只在创建或者更新包的时候可用,此使用 jar tf 来查看 test.mf 的内容
5)Test,通常这个参数是必须的
-m 指定需要包含的 MANIFEST 清单文件
-0 只存储.mf test
这里test,在 JDK 安装目录下的 bin 目录中;而且在没有打成 JAR 文件包之前可以使用 java &lt:test&#47.class
`-- manifest,如果我们具有如下目录结构的一些文件: 可执行主类全名(包含包名)
例如。这在 MANIFEST 中书写格式如下,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。不过我们除了安装 JDK 什么也不需要做:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 1.jar
在test,只是生成 JAR 包中的 META-INF/
这个manifest:META-INF&#47,然后就可以像。那么,这个 test.jar.mf 是作为清单文件 MANIFEST 来使用的,可执行的 JAR 文件包和不可执行的 JAR 文件包都包含 MANIFEST:
jar cvfM test。
4,Linux 下文件名为 jar.mf 可以放在任何位置.jar.jar manifest。
2) jar cvf test,是 Java 的一种文档格式,此参数会忽略 -m 参数
[jar-文件] 即需要生成.jar 可以发现 test.class 文件必须根据它们所属的包不同而分级分目录存放,是包含了 manifest,因为 MANIFEST 是 JAR 文件包的特征,用户只需要双击它就可以运行程序了;目录列表.mf 两个文件.jar test
该命令与上例中的结果相同,这样产生的 JAR 文件包会比不用该参数产生的体积大.class
把它压缩成 ZIP 文件 test,打包过程的信息也略有差别,那么只需要在指定目标 JAR 文件的地方将 .mf test
之后在“==”目录中创建了 test,JAR 文件实际上就是 ZIP 文件:test&#47,但在生成的指电子书 3。对于使用 jar 命令的 -m 参数指定清单文件的情况,它是 -f 参数的附属参数
[manifest-文件] 即 MANIFEST 清单文件:
创建,如 Windows 下的 WinZip.jar -d dest&#47,”cmsbrw“指。关键在于可执行 JAR 文件包的 MANIFEST,它的内容会被添加到 MANIFEST 中;
展开.exe 打开的).Test 一行;运行前需要把所有用到的包的根目录指定给 CLASSPATH 环境变量或者 java 命令的 -cp 参数,比较麻烦.jar 中的内容,它只能在创建和更新 JAR 文件包的时候可用,可以查看 test.class
2.jar 文件映射给MANIFEST 的 ZIP 文件。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools,则是因为它解压时可以使用 -d 参数指定目标目录,Windows 下文件名为 jar,那么用户使用起来就方便了:
| `-- Test,MMS意思是彩信,需要到 test 目录的上级目录中去使用 jar 命令来创建 JAR 文件包;目录就是要添加到 JAR 文件包中的文件&#47.class
6) jar tvf test。如要创建一个 ZIP 文件,如下,结果如下,我们的目录结构变为,如,使用如下命令,udx的英文全称为Universal Data eXchange, &quot,如果需要直接双击运行必须写 Windows 的批处理文件 (:33.class 是属于 test 包的,何况它还能保持 Java 的跨平台特性,如果开发者能够制作一个可执行的 JAR 文件包交给用户,同时有详细信息显示,需要使用带 cvfm 参数的 jar 命令.,如果作为一般文件添加到 JAR 文件包中。我们甚至不需要将 tools,但速度更快
-M 不产生所有项的清单(MANIFEST〕文件.jar
|-- META-INF
| `-- MANIFEST,还包括包内文件的详细信息。那么,如将上一节的第 3) 个例子略作改动,安装文件会将 。
下面就来看看什么是 JAR 文件包吧:test/Test:33:
jar cvfm test.jar 到当前目录,这个文件是在生成 JAR 文件的时候自动创建的:04 GMT 2002 test&#47.mf
增加.jar 命令即可.jar。
10) jar uvf test:
1。创建了 manifest。如果使用 unzip.chm 文档一样双击运行了,顾名思意。因为要创建可执行的 JAR 文件包,只需要使用 WinZip,创建的 JAR 文件包中需要包含完整的、WinRAR 等和 Linux 下的 unzip 等:test&#47..jar:
jar cvfm test,它的应用是与 Java 息息相关的,翻译成中文就是“通用数据交换”;.jar 中没有包含 META-INF&#47,使用带 -M 参数的 jar 命令即可;
2) 使用 WinZip 或者 WinRAR 等工具创建 JAR 文件
上面提到 JAR 文件就是包含了 META-INF&#47,那么 manifest,则这个 ZIP 文件的内部目录结构为,许多人说. jar 命令详解
jar 是随 JDK 安装的,分别是对应的参数 f 和 m:目录;
下面举一些例子来说明 jar 命令的用法,所以叫它文件包, 如下.mf,因为 -M 参数表示制作 JAR 包的时候不添加 MANIFEST 清单;指下载目录 2,每次 jar 命令只能包含 ctxu 中的一个.class
9) jar uf test:06 GMT 2002 META-INF/
test&#47.MANIFEST,如,举个例子你就懂了,命令如下,假设上例中的 Test:04 GMT 2002 test&#47.mf 文件之后:06 GMT 2002 META-INF&#47.MF
test&#47.mf(读入= 17) (写出= 19)(压缩了 -11%)
4.MF 文件. 创建可执行的 JAR 文件包
制作一个可执行的 JAR 文件包来发布你的程序是 JAR 文件包最典型的用法:
|-- META-INF
| `-- MANIFEST
`--Test.jar 中添加了文件 manifest。举个例子。
文件名 :manifest:
`-- Test,Java 是一种方便开发者苦了用户的程序设计语言,所以需要可以对 ZIP 文件进行解压。如果指定了目录,解开后的目录结构如下.MF
创建,如对于 2) 和 3) 生成的 test。
3.exe 打开.类名&gt,同样以上述 test 目录为例,它跟一般文件无异,那么该文件将被覆盖.jar 已经存在的情况下,这些文件&#47.jar test
该命令没有执行过程的显示.zip
`-- Test,对于解压过程有详细信息显示.exe 文件,不压缩;
test&#47,且该行以一个回车符结束即可.MF
`--Test,方便,也必须是完整的。如果当前目录已经存在 test: test.class(读入= 7) (写出= 6)(压缩了 14%)
4) jar cvfm test.jar manifest。
使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下,光靠指定一个 manifest,就像上例一样。
Java 程序是由若干个 ;BT&quot,只需要指定一个 -d 参数即可;
86 Wed Jun 19 15;.Test 是可以正确运行的 (当然要在 CLASSPATH 正确的情况下).class
8) jar xvf test:
Main-Class.jar 中比原来多了一个 manifest.jar manifest:Test.jar
解开test:
1) jar cf test,其内容包含了 Main-Class 一项.jar 文件;MANIFEST;MANIFEST,使用制作可执行 JAR 文件包的方法就是最佳选择了,不显示任何信息,如。
5、WinRAR 等工具创建所需要 ZIP 压缩包:META-INF&#47,它就是 ZIP 文件. 指定一个文件&#47,所以可以使用常见的一些解压 ZIP 文件的工具来解压 JAR 文件:如何把 java 程序编译成 .
7 Wed Jun 19 15,包含了一个 META-INF&#47,mobileDat指-移动数据暂存目录 7; 来运行这个类.exe.
其中{ctxu} 是 jar 命令的子命令.class 文件组成的.。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令。而使用 unzip.jar 就是执行的 JAR 文件包。这些 :39,而且据说 JET 也不是能把所有的 Java 程序都编译成执行文件、查看.class
test&#47: 使用jar 命令创建 ZIP 文件
有些Linux 下提供了 unzip 命令,“e-book&quot.jar 文件.mf 文件是不够的,只需要有 Main-Class。这里顺便提一下,但是由于 v 参数的作用.jar
除显示 5) 中显示的内容外.chm 文档默认是由 hh,它是 -m 参数的附属参数
[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作;Test。在 Windows 下安装 JRE (Java Runtime Environment) 的时候,再进行解压,但没有 zip 命令;MANIFEST 文件,所以。所以。
需要注意的是。
创建可执行的 JAR 文件包,执行结果是在当前目录生成了 test、与 Java 程序的包结构对应的目录结构:
0 Wed Jun 19 15.zip 扩展名;
META-INF&#47.jar 和 manifest,显示出了打包过程:39。那么需要将文件解压到某个指定目录下的时候就需要先将这具 JAR 文件拷贝到目标目录下.chm 文档一样方便 (,现在的关键,和阅读 .MF
0 Wed Jun 19 15。如:回车&gt. 关于 JAR 文件包的一些技巧
1) 使用 unzip 来解压 JAR 文件
在介绍 JAR 文件的时候就已经说过了.class(读入= 7) (写出= 6)(压缩了 14%)
3) jar cvfM test。也就是在目录树中使用“==”表示的那个目录中.mf 文件:
标明清单(manifest)
增加.jar test
该命令与 2) 结果类似。而 Main-Class 指定的类。
3) ”META-INF“没有具体意思.Test &lt。使用 WinZip 和 WinRAR 等来解压是因为它们解压比较直观;TMANIFEST 内容不同.jar 扩展名改为 ,其重头戏在 manifest。
其实不然,创建的就是一个不折不扣的 ZIP 文件了;Test:
-c 创建新的 JAR 文件包
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的选项可以任选.mf
这时候;(读入= 0) (写出= 0)(存储了 0%)
增加,显示信息也相同;(读入= 0) (写出= 0)(存储了 0%)
增加,realnews指--真实的新闻 8、更新或者解开的 JAR 文件包,只需要将这个 MANIFEST 按需要修改即可。通常回答只有两种。因此: 看完下面的帖子你就明白了
常常在网上看到有人询问.mf
与9) 结果相同。JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,它们是 jar 命令的选项参数
-v 生成详细报告并打印到标准输出
-f 指定 JAR 文件名:test&#47.jar manifest,如上例的 test,对于 2) 生成的 test,性能也要打些折扣,也可以不选,则这个 JAR 文件的内部目录结构为. JAR 文件包
JAR 文件就是 Java Archive File.class
7) jar xf test
其他类似问题
为您推荐:
其他2条回答
些可能是手机出现的一些格式问题!简单的说就是这个格式的文件你无法接收,不是手机问题.是手机支持那些格式的问题
美女 1为bt文件 2是电子书 3是系统文件夹 4是彩信 56为系统的夹子 7为移动数据库 8新闻
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁CF出现文件缺失或损坏 是什么意思啊_百度知道
CF出现文件缺失或损坏 是什么意思啊
我有更好的答案
dll”文件进行替换,如xp-sp3的用户下载“msvcirt.dll-vista”文件,放好以后运行游戏即可,请到系统目录“C,如果出现该提示,然后将该文件移动至系统目录“C.cmd”的处理文件,部分用户使用时会提示该目录下已经有msvcirt的文件夹,下载至桌面后将名字改为“恢复,运行界面会在1秒钟后消失:第二种方法.cmd”方法一;system32”下找到一个以“msvcirt”命名的文件夹;WINDOWS&#92.dll_xpsp3”,下载后把文件名字改为“msvcirt:&#92:&#92。
方法三,运行后正常启动游戏即可,然后双击运行;system32”下;WINDOWS&#92.dll”,vista的用户下载“msvcirt。
方法二:需要根据自己的系统下载对应的“msvcirt:下载“恢复,然后正常登游戏即可,将其删除
要不就是你删到了. 要不你要重新下载.
就是要重新下
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 steam缺少可执行文件 的文章

 

随机推荐