我只是好奇是否有任何类型的程序/应用程序允许以一种语言输入代码并将其转换为另一种语言,如asm.这似乎完全可能......所以这样的事情存在吗?
我有一个应用程序,它在文件系统和GAC中打开一系列DLL,并锁定这些文件.如何显式释放这些句柄,以便我可以在Visual Studio中重建它们而无需关闭我的应用程序?
代码如下:
private void BuildTabPage_AssemblyTree(string filename, string foldername)
{
Assembly assembly;
try
{
assembly = Assembly.LoadFrom(filename);
}
catch (Exception ex)
{
MessageBox.Show("Error loading assembly " + filename + "\n" + ex.Message);
return;
}
TreeNode tRoot = BuildNode(assembly, foldername);
tvAssemblies.Nodes.Add(tRoot);
tvAssemblies.ExpandAll();
txtResults.Text =
RefsFound.ToString() + " References Located in Filesystem\r\n" +
RefsInFramework.ToString() + " References Located in Framework\r\n" +
RefsInGac.ToString() + " References Located in GAC\r\n" +
RefsNotFound.ToString() + " References Not Found: \r\n\r\n";
foreach (string s in MissingFiles)
txtResults.Text …Run Code Online (Sandbox Code Playgroud) 我的编译器不能使用我拥有的汇编文件和我的其他编译器,它将无法使用我拥有的c文件.我不明白集会.我需要移动它,但我没有快速到达任何地方.那里有人可以提供帮助吗?我无法相信没有翻译.这是文件的开头:
list p=18F4480
#include <p18F4480.inc>
#define _Z STATUS,2
#define _C STATUS,0
GLOBAL AARGB0,AARGB1,AARGB2,AARGB3
GLOBAL BARGB0,BARGB1,BARGB2,BARGB3
GLOBAL ZARGB0,ZARGB1,ZARGB2
GLOBAL REMB0,REMB1
GLOBAL TEMP,TEMPB0,TEMPB1,TEMPB2,TEMPB3
GLOBAL LOOPCOUNT,AEXP,CARGB2
LSB equ 0
MSB equ 7
math_data UDATA
AARGB0 RES 1
AARGB1 RES 1
AARGB2 RES 1
AARGB3 RES 1
BARGB0 RES 1
BARGB1 RES 1
BARGB2 RES 1
BARGB3 RES 1
REMB0 RES 1
REMB1 RES 1
REMB2 RES 1
REMB3 RES 1
TEMP RES 1
TEMPB0 RES 1
TEMPB1 RES 1
TEMPB2 RES 1
TEMPB3 …Run Code Online (Sandbox Code Playgroud) 这是一个两部分问题.但它都与同样的事情有关.
我想使用应用程序的IL代码来应用补丁.我想知道什么是正确的方法.显然我可以反编译它并读取和编辑il代码文件然后重新编译.但有没有办法在文件中将其作为msil代码读取.并且可能实时编辑它.
我试图编辑可执行文件的反编译代码.但每次我重新编译它都会导致执行问题.就像它再也找不到它的切入点了.我该如何计算?我猜我需要知道命令及其参数的长度,或者使入口点成为Label或其他东西.如果有像这样的东西的Visual Studio模板,我会很高兴.
你如何异化存储在EAX中的值?
问题出在这一行:
xor eax, key
Run Code Online (Sandbox Code Playgroud)
EAX包含我想要XOR的值的地址.我怎么能做到这一点?我虽然会有以下几点:
xor [eax], key
Run Code Online (Sandbox Code Playgroud)
但这不起作用(语法错误)
decrypt proc startAddress:DWORD , sizeOfSegment:DWORD , key:DWORD
xor ecx, ecx ; clear the ecx register for the counter
mov eax, startAddress ; copy the start address to eax
.while ecx < sizeOfSegment ; loop through the code
xor eax, key ; XOR decrypt the word
inc eax
inc ecx
.endw
ret
decrypt endp
Run Code Online (Sandbox Code Playgroud) 所以我一直在学习汇编并谈到堆栈的主题,存储本地,静态和全局变量和东西.
但是我很难想象它在脑海里.
内存底部但堆栈顶部:S whaa ??
令我困惑的是,每当某些东西被推入堆栈时,堆栈指针就会被删除.不应该添加它.
我的意思是我得到了代码,但很难知道究竟发生了什么.
我需要从下一个汇编代码创建一个可执行文件:
.MODEL SMALL
.DATA
TEXT DB 'Hello world!$'
.CODE
.STACK 20
.STARTUP
MOV AX, @DATA
MOV DS, AX
MOV AH, 9
MOV BL, 02H
INT 10H
MOV Dx, OFFSET TEXT
INT 21H
MOV AH, 4CH
INT 21H
END
Run Code Online (Sandbox Code Playgroud)
它适用于Turbo Assembler(tasm.exe),但我不想继续使用它,因为它不能在Windows 7中运行.
谢谢.
我正在处理一个简单的缓冲区溢出(是的,利用;但与问题无关)我试图找出内存映射中的字段,当GCC的堆栈保护器启用时.作为说明:
$ ./overflow
*** stack smashing detected ***: ./overflow terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb7f67da8]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb7f67d60]
./overflow[0x804845c]
[0x41414141]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:06 3704767 /home/hatred/w0rk/bugz
08049000-0804a000 r--p 00000000 08:06 3704767 /home/hatred/w0rk/bugz
0804a000-0804b000 rw-p 00001000 08:06 3704767 /home/hatred/w0rk/bugz
0804b000-0806c000 rw-p 0804b000 00:00 0 [heap]
b7e5a000-b7e67000 r-xp 00000000 08:06 368705 /lib/libgcc_s.so.1
b7e67000-b7e68000 r--p 0000c000 08:06 368705 /lib/libgcc_s.so.1
b7e68000-b7e69000 rw-p 0000d000 08:06 368705 /lib/libgcc_s.so.1
b7e69000-b7e6a000 rw-p b7e69000 00:00 0
b7e6a000-b7fc6000 r-xp 00000000 08:06 386037 /lib/tls/i686/cmov/libc-2.9.so
b7fc6000-b7fc7000 ---p 0015c000 08:06 386037 /lib/tls/i686/cmov/libc-2.9.so …Run Code Online (Sandbox Code Playgroud) const int howmany = 5046;
char buffer[howmany];
asm("lea buffer,%esi"); //Get the address of buffer
asm("mov howmany,%ebx"); //Set the loop number
asm("buf_loop:"); //Lable for beginning of loop
asm("movb (%esi),%al"); //Copy buffer[x] to al
asm("inc %esi"); //Increment buffer address
asm("dec %ebx"); //Decrement loop count
asm("jnz buf_loop"); //jump to buf_loop if(ebx>0)
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc编译器.出于某种原因,我的缓冲区/ howmany变量在我的asm眼中是不确定的.我不知道为什么.我只想将缓冲区数组的起始地址移动到esi寄存器中,在将每个元素复制到al寄存器时循环"howmany"次.