Qiuyu Zhang
2005-May-12 03:24 UTC
[LLVMdev] Re: RE:RE: Question about inserting instructions
Hi, One more thing I just realized for the method Chris mentioned.>Actually that's not true. You can make instructions with an asmstring of: > > ".byte 123\n .byte 56\n .byte 86" and those bytes will get emitted to >the code stream.It seems to work on generating binary file since it uses asmstring, right? There are two steps related with binary file operation, 1) opt -load passname < *.bc > *.bc which is the first one. 2) the second one is 'as' or 'gcc' as -o *.o *.s gcc -c *.s -o *.o Is it true the method you mention should work on the first one? Another question, when emitting the asmstring to the code stream ( binary code string,right), we need adjust some instruction operation like jmp jne call, for example jmp/jne 0xxxx ( address of memory or offset). If we put asmstring in code stream, we should adjust the value/offset of such instruction, it makes complicated. So that is why I am trying find a way to insert meaningless code when generating assemble code by llc. ( assemble code generated work on label for those instruction). Actually, I think I can write a code which read assemble file generated by 'LLC' and find the tag of the dummy BB and put some meanless assemble code like 'push %eax' etc. I am supposed that it should work well. However, I prefer to implement the whole thing within LLVM. Anyway, I do appreciate if you can give me some hint about how to emit asmstring to code Thanks ----- Original Message ----- From: Qiuyu Zhang To: llvmdev at cs.uiuc.edu Sent: Wednesday, May 11, 2005 7:32 PM Subject: RE:RE: Question about inserting instructions Hi, Thanks again. >>> during step 2, we read *.bc code and find dummy BB and put some >>> meaningless machinecode, here, we cannot put some illegal machince >>> code, otherwise, step 3 goes to fail. >> >> Yes, you are correct -- if you want to create illegal code you need to >> not use system as. What you need is the ability for llc to create >> object files with native code directly, without using the system >> assembler. I think someone is working on it, but I'm not sure as to the >> status. Otherwise, you will just have some random one-byte >> instructions. > >Actually that's not true. You can make instructions with an asmstring of: > > ".byte 123\n .byte 56\n .byte 86" and those bytes will get emitted to >the code stream. Yes, you are right. The way is like buffer overflow code in which the instructions exist as asm string in memory \x123\x35\86......However, I have no idea how to make it . Would you like giving me idea? Is there any way I can follow? CodeEmitGen.cpp MachineCodeEmitter.cpp ... which one is response for it? Thanks. Qiuyu -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20050511/8abbc935/attachment.html>