汇编语言(asm)编程问题。请务必使用您正在使用的处理器和/或指令集以及汇编程序。警告:对于.NET程序集,请改用标签[.net-assembly]。对于Java ASM,请改用标签[java-bytecode-asm]。
68000汇编中实现排序算法,并决定使用堆栈将参数传递到一个子例程,该子例程将数组中的两个元素交换。我想确保我正确有效地处理堆栈。 特别是,在调用
64位等效于x86图像处理程序中的BSWAP 我在例行程序中使用的Delphi Firemonkey Exif实现来加载图像文件。 我正在尝试确定图像是否已旋转,因此我可以纠正
type TMarker = packed record Marker : Word; //Section marker Len : Word; //Length Section Indefin : Array [0..4] of Char; //Indefiner - "Exif" 00, "JFIF" 00 and ets Pad : Char; //0x00 end; TIFDHeader = packed record pad : Byte; //00h ByteOrder : Word; //II (4D4D) or MM i42 : Word; //2A00 (magic number from the 'Hitchhikers Guide' Offset : Cardinal; //0th offset IFD Count : Word; // number of IFD entries end; function SwapLong(Value: Cardinal): Cardinal; asm bswap eax end; procedure TExif.ReadFromFile(const FileName: string); var j: TMarker; ifd: TIFDHeader; off0: Cardinal; //Null Exif Offset SOI: Word; //2 bytes SOI marker. FF D8 (Start Of Image) f: File; begin if not FileExists(FileName) then exit; Init; System.FileMode:=0; //Read Only open AssignFile(f,FileName); reset(f,1); BlockRead(f,SOI,2); if SOI=$D8FF then begin //Is this Jpeg BlockRead(f,j,9); if j.Marker=$E0FF then begin //JFIF Marker Found Seek(f,20); //Skip JFIF Header BlockRead(f,j,9); end; //Search Exif start marker; if j.Marker<>$E1FF then begin i:=0; repeat BlockRead(f,SOI,2); //Read bytes. inc(i); until (EOF(f) or (i>1000) or (SOI=$E1FF)); //If we find maker if SOI=$E1FF then begin Seek(f,FilePos(f)-2); //return Back on 2 bytes BlockRead(f,j,9); //read Exif header end; end; if j.Marker=$E1FF then begin //If we found Exif Section. j.Indefin='Exif'. FValid:=True; off0:=FilePos(f)+1; //0'th offset Exif header BlockRead(f,ifd,11); //Read IDF Header FSwap := ifd.ByteOrder=$4D4D; // II or MM - if MM we have to swap if FSwap then begin ifd.Offset := SwapLong(ifd.Offset); ifd.Count := Swap(ifd.Count); end; if ifd.Offset <> 8 then begin Seek(f, FilePos(f)+abs(ifd.Offset)-8); end;
无法打印出8位寄存器的值 我试图从系统计时器中打印出本年度(CX),月份(DH),DAY(DL)和一周(AL)的日子。 存储在CX中的年正确打印出来。 我试图用
I决定创建一个用于8位数字的函数(最初是print_number8bit),但数字很奇怪(> 255)。我以为这也许是因为我试图与诸如L寄存器这样的H寄存器(将DH传递给BL)。因此,我决定创建2个函数:print_number8bitl for l寄存器和H寄存器的print_number8bith。 DH正确打印出来,但错误的月份:3而不是2。其他数据被错误打印(> 255)。
添加两个N字节整数在6502中产生n字节答案? 我在6502中还有另一个问题。 我正在尝试添加两个N字节整数来产生N字节结果。我不完全确定我是否尽可能多地了解6502芯片...
描述: 使用绝对索引的propstracking添加两个n字节整数
如何为此解密功能编写加密功能(PICOCTF GDB测试驱动器)? 我在picoctf逆向工程挑战GDB测试驱动器上工作,目标是使用二进制中的解密功能检索加密标志。 但是,而不是使用GDB,...
逆向工程挑战上工作
custombootloader无法加载C内核(kernel.c),但与汇编(kernel.asm)一起使用
当使用kernel.asm时,一切正常。但是,当我用kernel.c替换它时,我的引导加载程序无法加载内核并给出错误。
如何为此解密功能编写加密功能(PICOCTF GDB测试驱动器)? 我在picoctf逆向工程挑战GDB测试驱动器上工作,目标是使用二进制中的解密功能检索加密标志。 但是,而不是使用GDB,...
逆向工程挑战上工作
__int64_t fib_tr_const (__int64_t n, __int64_t n_1, __int64_t n_2) { if (n == 0x42 || n == 0x43 ) { return n_1 + n_2; } return 0x31 + fib_tr (n-1, n_2, n_1 + n_2); } void main (int argc, char ** argv) { __int64_t n = atoi (argv[1]); // printf("fib(%ld) = %ld\n", n, fib(n)); // printf("fib_tr(%ld) = %ld\n", n, fib_tr(n, 0, 1)); __int64_t volatile result = 0x4567; printf ("11111\n"); printf ("11111\n"); result = fib_tr_const(n, 0x123, 0x234); printf ("22222\n"); printf ("22222\n"); printf("fib_tr_const(%ld) = %ld\n", n, result); }