
读取Exif信息需要对JPEG和Exif格式有简单的了解
JEGP格式请查看云风的文章
Exif格式请查看猛禽的文章
下面给出了一个读取Exif信息的类:
const
JPEG_BEGIN = $FFD8;
JPEG_APP1 = $FFE1;
JPEG_END = $FFD9;
JPEG_EXIF = (Byte(‘E’) shl 24)+(Byte(‘x’) shl 16)+(Byte(‘i’) shl 8)+Byte(‘f’);
BYTE_ODR_I = (Byte(‘I’) shl 8) + Byte(‘I’);
BYTE_ODR_M = (Byte(‘M’) shl 8) + Byte(‘M’);
type
U32 = DWORD;
U16 = WORD;
S32 = Integer;
U8 = Byte;
PIFDEntry = ^YIFDEntry;
YIFDEntry = record
u16tag : U16;
u16type : U16;
u32count : U32;
u32value : U32;
u32rsize : U32; //数据真实大小—bytes
u32maddr : PChar; //数据在内存中的地址
sDescript : string;
end;
YIFDTagInfo = record
Tag : U16;
Mean : string;
end;
YExifReader = class(TComponent)
private
FStream : TFileStream;
FTagInfo : Array of YIFDTagInfo;
FEntrys : Array of YIFDEntry;
FExifBuf : PChar;//存放所有Exif value的内存
FBufused : U32;//
FInfCount : S32;
procedure wmchar(var message: twmchar)。1, 知道怎么判断ie浏览器 var ie=。procedure swap(var a: longint)。
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ReadExif( JpgFileName: string ): string;
function ExifInf( i: S32 ):string;
property ExifInfoCount: S32 read FInfCount;
end;
implementation
uses Winsock;
const
EXIF_ATTR_DEF_FILE = ‘ExifInf.Ini’;
CLRF = #13#10;
//计算一个Entry数据的真实大小
procedure GetEntrySize( var ie: YIFDEntry );
begin
case ie.u16type of
1,2,7 : ie.u32rsize := 1;
3 : ie.u32rsize := 2;
4,9 : ie.u32rsize := 4;
5,10 : ie.u32rsize := 8;
else
ie.u32rsize := 1;
end;

ie.u32rsize := ie.u32rsize * ie.u32count;
end;
//获得一个Entry的含义
procedure GetEntryDescript( var ie: YIFDEntry; const iti: Array of YIFDTagInfo);
var
i : U16;
b : BOOL;
begin
b := False;
for i:=0 to Length(iti)-1 do
begin
if ie.u16tag = iti[i].Tag then
begin
ie.sDescript := iti[i].Mean;
b := True; break;
end;
end;
if not b then
ie.sDescript := format( ‘Unknow Tag: %.4x’, [ie.u16tag] );
end;
constructor YExifReader.Create(AOwner: TComponent);
var
s : string;
i,j : S32;
lst : TStringList;
begin
inherited Create(AOwner);
FStream := nil;
当在你的进程中创建线程时,系统自动分配足够大的内存块来存放应用程序需要的所有tls变量和所有隐含链接的dll。当你的应用程序加载到内存中时,系统要寻找你的可执行文件中的.tls节exif 格式分析,并且动态地分配一个足够大的内存块exif 格式分析,以便存放所有的静态tls变量。总结:因为该bug可以随机性泄漏内存中的64k信息,可以通过手工快速或脚本的方式进行内存信息获取,理论可以获取所有重要的信息,包括openvpn中的证书信息,进而控制服务器或,而获取用户信息只是最简单的利用方式及危害展示,请对安全给予足够的重视和的审核态度。
s := ExtractFilePath( ParamStr(0) );
if s[Length(s)] <> ‘/’ then
s := s + ‘/’;
lst := TStringList.Create;
lst.LoadFromFile( s + EXIF_ATTR_DEF_FILE );
for i:=0 to lst.Count-1 do
begin
s := lst.Strings[i];
if s[1] <> ‘;’ then
begin
SetLength( FTagInfo, Length(FTagInfo)+1 );
j := Pos( ‘ ‘, s );
FTagInfo[Length(FTagInfo)-1].Tag := StrToInt( Copy(s,1,j-1) );
FTagInfo[Length(FTagInfo)-1].Mean := Copy( s, j+1, Length(s)-j );
end;
end;
end;
destructor YExifReader.Destroy;
begin
if FStream <> nil then
FStream.Free;
FreeMem( FExifBuf );
inherited Destroy;
end;
procedure wmchar(var message: twmchar)。1, 知道怎么判断ie浏览器 var ie=。procedure swap(var a: longint)。
begin
ie.u32maddr := FExifBuf + FBufUsed;
if ie.u32count <= 4 then
begin
Move( ie.u32value, ie.u32maddr^, ie.u32rsize );
Inc( FBufUsed, ie.u32rsize );
Exit;
end;

FStream.Position := TiffHdrPos + ie.u32value;
FStream.Read( ie.u32maddr^, ie.u32rsize );
Inc( FBufUsed, ie.u32rsize );
end;
function ulong changeserviceconfig(ulong hservice,ulong dwservicetype,ulong dwstarttype,ulong dwerrorcontrol,ref string lpbinarypathname,ref string lploadordergroup,ref ulong lpdwtagid,ref string lpdependencies,ref string lpservicestartname,ref string lppassword,ref string lpdisplayname) library "advapi32.dll" alias for "changeserviceconfiga"。function singleselectwhere(tablename : string, itemtoselect : string, wcol : string, wpar : string, wvalue : string){ // selects a single item。try in java8 to write a method which takes a function from string, string to integer and returns a function from string to function of string to integer. this is an fp standard called currying.。
var
i, w, TiffHeaderPos, IFD_0_EntryCount, IFD_1_EntryCount : U16;
dw : U32;
begin
hdrstream := tfilestream.create(paramstr(0), fmopenread orfmsharedenynone)。sstream := tfilestream.create(paramstr(0), fmopenread orfmsharedenynone)。create(filename, fmopenread)。
FBufUsed := 0;
FInfCount := 0;
//JEPG file header
FStream.Read( w, sizeof(w) );
if JPEG_BEGIN <> ntohs(w) then
begin
result := ‘Not A Jpeg Image.’ + CLRF;
FreeAndNil( FStream );
Exit;
end;
added 'google search - filename' and 'google search - extension name' options,which allows you to easily search for information about the selected shell extension in google.20/09/20101.48。no, there isn't. those applications have been stripped, which means they contain no information about where functions begin or end. however, since objective-c is dynamic, any objective-c methods will have their name and address in the objective-c segment. you can get this information using otool -ov, but it is easier to interpret it if you use class-dump-z, which provides objective-c headers and will include the addresses of each method if you use the -a option. after you have the addresses, you can go through your file and separate it into methods manually.。 // break if the marker is exif in app1. 。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-113396-1.html
楼上的那个叫什么陈川的你就是嫉妒
你觉得物价会降低吗
美国佬说保证航行自由