banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: nbthanh  XML
Profile for nbthanh Messages posted by nbthanh [ number of posts not being displayed on this page: 4 ]
 
@H3x4: nên tổng hợp 2 ý kiến của anh conmale và bạn choc_
anh conmale thì: muốn bảo mật cái nào thì phải tinh xảo và rành rõi cái ấy
bạn choc_ thì: bụt chùa nhà

Ví dụ thế này: bạn muốn viết code ("cái nào" và "cái ấy" trong ý của anh conmale) cho an toàn, ví dụ không dính SQL Inj hay XSS chẳng hạn thì bạn nên bỏ ra 9 phần luyện coding cho giỏi và 1 phần nghiên cứu thêm về kiến thức bảo mật. Chứ không phải là ngược lại 9 phần nghiên cứu hack/crack và 1 phần luyện coding!
Mà 9 phần coding đó chẳng phải ở trường đã đang và sẽ dạy đó ư? (cái "chùa nhà" là đây!)
Chắc là bạn H3x4 chưa nắm được ý của anh conmale smilie

- Mục đích là gì? Nếu bạn trả lời được thì bạn đâu cần post lên 1 bài "định hướng cho BKITNS". Mục đích bản thân nó đã là cái hướng rồi.

- Còn nếu bạn có mục đích rõ ràng và muốn xin ý kiến chẳng hạn như "mục đích như thế sai hay đúng" thì tôi nghĩ 1 là câu hỏi hơi...thừa, và 2 là nhiều lúc...không biết phải trả lời thế nào đây smilie

- Cũng có khi ý bạn định hỏi là "với mục đích đó, đường BKITNS đang đi có đúng/hợp lý không?". Cái này thì có lẽ nó cụ thể và dễ trả lời/góp ý hơn. Nhưng, đặt lại 1 câu hỏi: thế qua thời gian đã trải qua bạn có thấy là những gì bạn đã làm có giúp cho bạn tiến tới gần hơn cái mục đích mà bạn đã đặt ra hay không?

rs wrote:
Tớ không quan tâm cách cài đặt (tớ dùng linux), nhưng có vài lời, mọi người biết thì reply, đừng có xả rác, vì tớ thấy nhiều người vẫn cài dùng windows xp bình thường. 

Đừng nặng lời thế khi bạn chưa hiểu được bạn chất của vấn đề!
Nói được cũng đúng mà nói không cũng không sai. Thực ra vẫn có cách workaround là vào CMOS chỉnh lại vài thông số (ví dụ giả lập SATA thành PATA). Nhưng sau khi chỉnh sửa hết để cho cài WinXP được thì performance của máy giảm xuống khoảng vài chục phần trăm so vởi nguyên gốc --> không đáng để nhọc công như vậy!

nguoivohinh244 wrote:
Chào các ban!

Mình phải làm đề tài : "Tìm hiểu các cách lấy mật khẩu Window" môn Kỹ thuật bải mật mà chưa biết bắt đầu từ đâu đây, Pro nào có thể vẽ đường cho mình được không? sắp phải báo cáo rùi. smilie  

Nếu mà thầy cho điểm theo kiểu tìm ra được 1 cách thì được 1 điểm chẳng hạn, thì bạn rớt chắc!
Mà trường nào lại có cái đề tài quái đản thế?

RonTok wrote:
em muốn tự làm nhưng bước đầu thấy hơi khóa khan nên muốn xin code mẫu. Sau này hiểu rõ hơn sẽ làm lấy. 

Nếu bạn chưa viết được gì hết mà đã "tham khảo" code "mẫu" thì bạn sẽ không bao giờ viết xong cái forum của bạn đâu!
Cứ lây forum HVA (hoặc bất cứ 1 forum nào đó), xem thử nó có các chức năng gì, xem thử chức năng nào bạn viết được rồi bắt tay vào viết! Mày mò coi thêm sách vở tài liệu để bổ xung thêm kiến thức khi cần thiết.
Khi bạn bạn viết được 1 cái forum, chỉ cần đơn giản thôi, rồi hãy kiếm code mà tham khảo.

RonTok wrote:
e đang muốn tự làm lấy 1 forum viết bằng PHP và CSDL: MyQL
anh em nào có source mẫu share e với. (Nhỏ gọn thôi không cần hoành tráng đâu ^_^) 

Nếu bạn muốn tự làm lấy thì lấy source mẫu để làm gì?

0SAT0 wrote:
Kiến thức không phải của riêng ai , chôm thì đã sao nào . Bọn mình không được ai giúp đỡ, tự đi tìm đường nghiên cứ học tập , như vậy có gì là sai ? Những người viết ra những thứ này cũng muốn nhiều người khác được học tập theo nếu không hõ đã không public rồi bạn à . 

Kể 1 câu chuyện thế này.

Các bài tute tôi post lên mạng thường chứa rất nhiều link tới các tài liệu khác, phần nội dung thì cũng trích dẫn rất nhiều từ các nguồn khác nhau và đều có ghi rõ. Còn phần tôi tự viết thì chỉ có 1 nhúm xíu, nhiều khi gần như...chẳng có gì smilie
(đây là tôi đang ủng hộ việc 'chôm' đấy nhé!!!)

10 người đọc bài tute của tôi thì 9 người bĩu môi: "úi trời, hóa ra cũng là do gắn góp nhặt cả, vậy thì mình cũng làm được, có gì hay ho đâu" (ặc, vậy nếu như tôi dấu hết link hết nguồn, làm cho người đọc tưởng rằng 100% công sức là của tôi thì chắc tôi sẽ được nhiều người "tung hê" lắm đây smilie ).
Chỉ có 1 người viết email cảm ơn tôi: "Nhờ nhiều link tham khảo của anh mà tôi đỡ mất công tìm tài liệu lung tung, đọc thêm tài liệu tham khảo anh giới thiệu tôi có thêm được nhiều kiến thức hay. À, mà đoạn 1.2.3 đó anh trích từ nguồn site X, tôi mới ghé qua thấy họ cập nhập thêm 2 chương nữa rất hay, nếu có thời gian anh cập nhật thêm bài viết nhé".

Hiện giờ thì người thứ 10 đó làm lead của mấy đồng chí kia smilie
Đâu chừng 14-15 năm trước (hơn nữa thì tôi chịu, không biêt/search ra được), JDK 1.0 thì phải. Trong phần javadoc trong source của class java.lang.Integer đó đoạn:
The Integer class is a wrapper for integer values. In Java, integers are not objects and most of the Java utility classes require the use of objects. Thus, if you needed to store an integer in a hashtable, you would have to "wrap" an Integer instance around it. 

(bản cũ nhất mà tôi có thể kiếm được là version 1.26 ngày 10/04/95; search 1 số đoạn ở trên trong Google bạn có thể tới được 1 số trang web - phần lớn là từ các trường ĐH/Cao đẳng - còn lưu giữ một phần javadoc cũ)
Như vậy thì có thể tạm kết luận mục đích lúc đầu là nó như thế smilie

P/S: Tuy bài viết bạn rongchaua đã edit rồi, nhưng tôi cũng comment thêm chút là có lẽ bạn đọc/hiểu nhầm "làm việc với object" thành "làm việc với class Integer" nên các ví dụ phản biện bạn đưa ra chỉ là so sánh sử dụng giữa int và Integer. Ở đây ta đang nói "object" chung. Ngoài ngữ cảnh là để phục vụ cho tính toán số học cần làm việc trên primitive type (vì một số lý do khác nhau, performance là 1 trong số đó), các ngữ cảnh khác thì phần lớn Java vẫn làm việc với object.

rongchaua wrote:
Đó chỉ mới giới thiệu về lớp Integer chứ chưa trả lời cho câu hỏi "tại sao lại phải có lớp Integer khi đã có kiểu primitive int?". 

Nếu bạn biết câu trả lời thì chỉ cần đơn giản là gõ vào câu trả lời là được. Tui thấy dạo này trên HVA có cái ngộ là trả lời bằng 1 câu hỏi khác. Kiểu như đánh đố hay để chứng tỏ cái gì đó thì phải. Vừa mất thời gian người đọc mà chẳng giúp được gì với câu trả lời kiểu này. Và riêng cá nhân tôi thì coi cái "kiểu" trả lời này là spam. .
Sẵn tiện thêm 1 link về Integer và int http://mindprod.com/jgloss/intvsinteger.html 

Chả phải là để chứng tỏ gì cả mà đơn giản là vì bạn nói "thôi để trả lời luôn" mà nhìn hoài không thấy bài viết của bạn trả lời cho cái gì cả (cái "tại sao" ấy) nên tôi chỉ thắc mắc thế thôi.
Không hiểu 1 bài viết "thôi để trả lời luôn" + sau đó là 1 lô 1 lốc mà hóa ra thực tế thì...chả trả lời cho cái gì cả thì cái kiểu bài này có được coi là spam không nhỉ?

Mà thôi để trả lời luôn kẻo bạn lại... smilie
- Bài trả lời số 2 này của bạn + cái link kia....vẫn chưa trả lợi đúng vào trọng tâm phần "tại sao" trong câu hỏi của choc_ Mà việc đánh giá câu trả lời thì đâu cần gì kiến thức kỹ thuật sao siêu nhỉ? Câu hỏi "tại sao" thì câu trả lời chỉ cần có "tại vì". Tìm đỏ con mắt không thấy phần "tại vì" thì rõ ràng 1 là "hỏi 1 đường trả lời 1 nẻo" 2 là chưa trả lời gì cả.
- Câu trả lời của bạn hi đúng hơn (java là 1 ngôn ngữ hướng đối tượng). Tuy nhiên chữ "thao tác" thì hơi tối nghĩa, mà có lẽ nên thay bằng "phần lớn các medhod và class nhận vào tham số là object và/hoặc trả về kết quả là object". Đó là lý do tại sao phải có thêm các class Integer, Double, Float...bên cạnh các primitive type int, float, double...Primitive type thì được sử dụng trong ngữ cảnh các phép tính toán số học.

P/S: Kiểm chứngkiểm tra lại luôn là các khâu quan trọng, nhất là đối với lĩnh vực khoa học. Chẳng phải đi thi lúc nào giám thị cũng nhắc nhở kiểm tra lại bài làm kỹ càng trước khi nộp bài đó sao (mà form post bài của HVA để nút "xem trước" ở trước nút "gởi đi" đó).
Do vậy "trả lời bằng một câu hỏi khác" là 1 cách gợi ý (còn nếu không thích gợi ý mà chỉ thích "cháo đưa tận miệng" thì...xin lỗi vậy, lần sau nhớ nói rõ trước smilie ) và cũng là một cách để bạn có thể giúp bạn tự kiểm chứng và kiểm tra lại bài viết của mình.

proA.Vito wrote:

iam60487 wrote:
Bạn nói thử xem cái này có ứng dụng như thế nào cho trang web của bạn?
Mình nghĩ không nên làm vì:
+ Mỗi user mỗi tài khoản, đăng ký thì dễ lại chẳng giới hạn thành viên(hay web của bạn ngược lại?) cho nên chẳng ai dùng tk người khác đâu (không xét trường hợp mất pass).
+ Làm thế này làm cho máy chủ chạy chậm hơn là dùng session.

Có gì xin chỉ bảo!

 


Mình nghĩ nếu để 2 user đăng nhập cùng lúc, thì người không phải chủ thật của acc đó sử dụng acc này để làm những việc linh tinh thì không tốt, ví dụ post bài linh tinh, thay đổi thông tin cá nhân, ăn cắp thông tin, ... Ví dụ như 1 web bán hàng, thằng kia vào thay đổi thông tin liên hệ của acc đó như số điện thoại (nếu trang đó xác thực việc đặt hàng bằng cách gọi điện), rồi đặt một món hàng nào đó. Thì trang web sẽ gửi món hàng về cho người chủ thật mà người đó không biết. Rồi nhiều trang web khác nữa, mọi trang mình nghĩ sẽ nảy sinh nhiều vấn đề khác nhau...

Nhưng thực ra cái việc này rất hiếm xảy ra, vì rất ít khi 2 người đăng nhập cùng lúc. Nhưng mình nghĩ nên chặn được bao nhiêu thì cứ chặn thôi smilie

Nếu mình nghĩ sai thì mọi người góp ý nhé!!! Thanks mọi người 

Vậy bạn nghĩ tiếp đi là nếu bạn có chức năng đó thì nó có giải quyết được vấn đề không?

1. Chủ nhân thật login trước --> "tên kia" không login được ==> tốt
2. "Tên kia" login trước --> chủ nhân thật chỉ còn nước khóc, không login vào để đổi password hay "đẩy" tên kia ra được ==> bạn tự nghĩ hậu quả smilie

==> vậy vấn đề cốt yếu là 1. Nó có giải quyết được vấn đề không? 2. Nó có làm phát sinh thêm vấn đề gì nữa không?

rongchaua wrote:
Giờ thử trả lời câu hỏi, tại sao lại có lớp Integer này nhỉ, khi mà mình nhớ không lầm thì Java đã có primitive type là int mà ta :-p? 

Thôi để mình trả lời luôn. Để khỏi mất thêm 1 tháng.

The Integer class wraps a value of the primitive type int in an object. An object of type Integer contains a single field whose type is int.
In addition, this class provides several methods for converting an int to a String and a String to an int, as well as other constants and methods useful when dealing with an int. 

Đó chỉ mới giới thiệu về lớp Integer chứ chưa trả lời cho câu hỏi "tại sao lại phải có lớp Integer khi đã có kiểu primitive int?".

conmale wrote:

kokored wrote:
Nếu bạn "thật chán" thì bạn nên tìm một diễn đàn nào cho phép làm như thế thì thích hợp hơn và đỡ chán ơn.

------------------------------------------------------------------------------------------------------------------------------

Forum là nơi trao đổi kiến thức giúp ích cho mọi người rất nhiều . không phải là em ở Forum này chán mà là chán mấy ông Manager . mấy cái ông sợ chết . có mấy cái mẫu virus nhẹ nhàng cho mọi người nghịch để nâng cao khả năng cũng như kinh nghiệm thế mà đã sợ nó loang khắp diễn đàn rồi vội vã delete , movie ngay . thế có phải là chán không ????

Thôi em không đấu lý lẽ với người có quyền chức kẻo rước họa vào thân ! Xin mod movie topic này về Thùng rác dùm 


Làm sao biết mẫu virus nào "nhẹ nhàng" và mẫu virus nào "không nhẹ nhàng"? Bồ chứng minh được điểm này, tôi phục hồi chủ đề của bồ ngay. 

Luật VN có qui định về phát tán virus rồi đó anh. Nhẹ hay nặng gì cũng "bóc lịch" cả smilie

FaL wrote:

kokored wrote:
Nếu bạn "thật chán" thì bạn nên tìm một diễn đàn nào cho phép làm như thế thì thích hợp hơn và đỡ chán ơn.

------------------------------------------------------------------------------------------------------------------------------

Forum là nơi trao đổi kiến thức giúp ích cho mọi người rất nhiều . không phải là em ở Forum này chán mà là chán mấy ông Manager . mấy cái ông sợ chết . có mấy cái mẫu virus nhẹ nhàng cho mọi người nghịch để nâng cao khả năng cũng như kinh nghiệm thế mà đã sợ nó loang khắp diễn đàn rồi vội vã delete , movie ngay . thế có phải là chán không ????

Thôi em không đấu lý lẽ với người có quyền chức kẻo rước họa vào thân ! Xin mod movie topic này về Thùng rác dùm 


"Mấy ông manager" thấy bồ vi phạm nội quy mà chưa làm gì, giờ tui mới làm đây. Bồ đi nghỉ mát 1 tuần cho đỡ chán.
Bồ Angelvn đi với kokored luôn cho nó công bằng.
 

@FaL:
cho kokored 1 tuần nghiền ngẫm nội qui của diễn đàn: không ý kiến.
"Thọc gậy bánh xe" như Angelvn thì chí ít phải gấp đôi thế mới xứng!

proA.Vito wrote:
Vậy làm thế nào để giải quyết được vấn đê của em ạ khi mà cơ chế "SSO" khác ... nửa vòng trái đất với cái mà em hỏi ạ!!! smilie

Làm gì cũng có mục đích. Câu hỏi: bạn làm vậy để làm gì? Nó giải quyết được vấn đề gì của bạn? Hay là bạn cố công làm nó để rồi...không còn ai muốn vào site của bạn nữa?

proA.Vito wrote:

nbthanh wrote:

proA.Vito wrote:

ducmanh wrote:
Ý của anh ấy là giả sử user login rồi tự nhiên treo máy, mất điện,... cắm PC ở nhà rồi vác Laptop ra ngoài dịch vụ, đi làm hay bất cứ máy khác thì cũng sẽ kô login được do chưa click "close" để đóng trình duyệt hay logout

 


Cái em muốn hỏi anh là cơ chế "Single Sign On" cơ. Nhưng em cũng lên google search rồi... Em cũng hiểu cái cơ chế này là gì rồi hi` hi`. Cảm ơn ông anh đã hướng dẫn :X 

Cái Single Sign On và cái bạn hỏi trong bài đầu tiên nó khác nhau...nửa vòng trái đất!
Tôi đang tự hỏi không biết bạn có thực sự hiểu cái mà bạn đã post lên không nữa. 


Thực ra thì em cũng mới chỉ đọc qua về cái cơ chế single sign on này. Em cũng không biết là có đúng ko nữa... Em hiểu nó là một kĩ thuật liên quan đến hệ thóng, cho phép đăng nhập một lần cho tất cả hệ thống... Và có 1 cơ chế tuơng tự là single sign off... Em nghĩ cũng có ý tuơng quan với câu hỏi của em thôi. Nhưng anh lại bảo là khác nửa vòng trái đất thì chắc là do em chưa tìm hiểu kĩ lắm. Vì em mới tìm được 1 ít thông tin về nó, nhưng có vẻ nó hơi xa với kiến thức hiện tại của em, Nên em chưa thực sự nghiên cứu (vì chưa đủ trình độ), mà để 1 thời gian nữa.

Nếu em có gì sai, mong các anh chỉ dẫn... hi` hi`. Thanks các anh!!! 

Single Sign On là gì, bạn có thể đọc ở đây: http://en.wikipedia.org/wiki/Single_sign-on
Nôm na là ví dụ server của bạn có nhiều site, ví dụ www.domain.com, ebooks.domain.com, music.domain.com, v.v... SSO là cơ chế giúp bạn chỉ cần login ở 1 nơi duy nhất là truy cập được vào các site còn lại mà không cần phải mỗi nơi phải login lại.

prixaco wrote:
(nói có gì không phải các bạn đang dùng asp bỏ quá nhé) 

"không phải" thì để hậu xét, còn nói trật nói bậy thì chắc mà khó bỏ qua được.

Sao bài viết của bạn phần nói bậy nó nhiều hơn phần nói đúng vậy bạn?
Nếu bạn viết của bạn là lấy 100% từ người khác, nơi khác (thấy có câu "Bài viết được dịch từ Haoing china") thì chí ít bạn cũng phải hiểu nó nói gì và thấy nso đúng sai ra sao đã rồi hãy lấy đi "khuyên" người khác chứ!

proA.Vito wrote:

ducmanh wrote:
Ý của anh ấy là giả sử user login rồi tự nhiên treo máy, mất điện,... cắm PC ở nhà rồi vác Laptop ra ngoài dịch vụ, đi làm hay bất cứ máy khác thì cũng sẽ kô login được do chưa click "close" để đóng trình duyệt hay logout

 


Cái em muốn hỏi anh là cơ chế "Single Sign On" cơ. Nhưng em cũng lên google search rồi... Em cũng hiểu cái cơ chế này là gì rồi hi` hi`. Cảm ơn ông anh đã hướng dẫn :X 

Cái Single Sign On và cái bạn hỏi trong bài đầu tiên nó khác nhau...nửa vòng trái đất!
Tôi đang tự hỏi không biết bạn có thực sự hiểu cái mà bạn đã post lên không nữa.
Giải quyết được vấn đề click nút close thì cũng đâu có giải quyết được vấn đề rớt mạng hay cúp điện --> user lần sau cũng không login vào lại được.
==> vậy cái cần nên sửa chính là cái cơ chế bắt user chỉ được login 1 lần kìa!
$conn1 = mysql_connect("host1", "username1", "password1");
$conn2 = mysql_connect("host2", "username2", "password2");

Rồi cứ thể mà sử dụng $conn1 với $conn2

TonjDua wrote:
-Và Hacker chân chính là người như thế nào ? 

Là người không post những topic để hỏi như thế này smilie

choc_ wrote:
Thấy cái movb không bạn?... 

Thấy, và thấy rất rõ!

choc_ wrote:
Nó đưa vào 0xf6 = 246 

0xf6 = -10, không phải là 246!

Các compiler như gcc, bcc có option -S để sinh ra mã asm trung gian. Sử dụng option này bạn sẽ thấy cách mà compiler hiểu & xử lý biên dịch chương trình.
Với đoạn mã:
Code:
int i;
char c;
long int l;
i = (int)(MAX_LEN - 10);
c = (char)(MAX_LEN - 10);
l = (long)(MAX_LEN - 10);


Max asm sinh ra:
Code:
movl $246, -16(%ebp)
movb $-10, -9(%ebp)
movl $246, -8(%ebp)


Thấy rõ ràng là -10 (và binary code của nó là 0xf6)

choc_ wrote:
@nbthanh: rất vui là cuối cùng bạn cũng đã đọc cái spec. Mình thấy cái 6.4.8 nó đã ghi rõ rồi mà... 

Tôi thì ngược lại, rất buồn là bạn _đã_ đọc cái spec smilie

P/S:
Code:
char c = 1L;

sinh ra mã asm:
Code:
movb $1, -9(%ebp)


(edit: sửa chỗ ghi nhầm 10 thành -10).

StarGhost wrote:
Mình có một lưu ý thế này, tại vì mình thấy có nhiều chỗ các bạn nói rằng giá trị của constant expression (vd. MAX_LEN - 10) được tính toán ở bước pre-processing, nhưng theo mình biết thì các compilers hiện đại làm việc này ở bước compilation, còn bước pre-processing chỉ thay giá trị MAX_LEN bằng giá trị được define trong code. 

Cảm ơn bạn đã lưu ý, tôi nghĩ là tôi dùng hơi sai ngữ nghĩa của "pre-processing" 1 chút.
Nhưng nó cũng phải ở trước bước sinh mã cuối cùng - có lẽ là trong "translation phase 7" hoặc trước đó.

choc_ wrote:
@nbthanh: không phải chẳng may mà hai cái bạn tính nó ra kết quả giống nhau đâu, tự vì nó bắt buộc phải giống nhau, bạn thử lấy giấy viết ra tính thử xem sẽ thấy.

Mình có làm một chương trình nhỏ thế này, mong là bạn nbthanh sẽ đồng ý với những luận điểm ở trên của mình sau khi xem chương trình này:

Code:
#include <stdlib.h>
#include <stdio.h>
#define MAX_LEN 256
int main(int argc, char **argv)
{
short i;
i = MAX_LEN-10;
printf("%d %d\n", i, sizeof(MAX_LEN-10));
return 0;
}


Lưu ý là mình đổi i từ int sang short, để bạn nbthanh thấy là compiler cũng bỏ bước trung gian ở trường hơp này luôn. Lưu ý thứ hai là sizeof(MAX_LEN-10) là 4. 

Vấn đề chính là ở chỗ đó: nó không có bước trung gian --> không kiểm chứng được mà chỉ có thể dùng các rule trong spec để dự đoán.

Nhưng nói chung thì tôi cũng chỉ nêu ra vấn đề để chúng ta có thêm 1 hướng để suy nghĩ, để đào sâu. Chẳng hạn như Mr.X là người maintain cái C/C++ spec, Mr.Y nào đó viết ra ycc và nói là ycc của tôi theo đúng spec.
Giờ ngoại trừ cách mở code của ycc ra coi, có cách nào viết được unit test để có thể kiểm chứng rằng ycc làm theo đúng spec? Ít nhất không kiểm chứng được hết thì cũng làm được phần lớn.
Ở đây có 1 trường hợp mà tôi nêu ra đó: dĩ nhiên đọc spec và suy luận thì ra, nhưng làm sao kiểm chứng?

Thực ra thì ở phần 6.4.8. Processing numbers của C99 có nói:
"A preprocessing number does not have type or a value; it acquires both after a successful
conversion (as part of translation phase 7) to a floating constant token or an integer
constant token".

Như vậy nếu ghi short s = MAX_LEN thì bước preprocessing MAX_LEN sẽ là 256 và tại thời điểm này nó chưa có type. Compiler sẽ thử convert 256 sang "floating constant token" hoặc "integer constant token" rồi mới quyết định kiểu cho nó. Tôi cũng nghĩ rằng compiler chọn và convert sang token nào thì lại tùy vào ngữ cảnh lúc đó.

Tuy nhiên vẫn còn 1 chút khúc mắc nhỏ: s = MAX_LEN-10 thì ở bước preprocessing sẽ là s = 256-10 và mã sinh ra lại là mov 246,...?
Do vậy tôi cũng cho rằng 256-10 được xử lý thành 246 vẫn nằm ở bước pre-processing (vẫn hợp lý vì optimization có xảy ra trong giai đoạn pre-processing).
Và như thế, thì 246 ở giai đoạn này chưa có kiểu int (theo section 6.4.8), vậy cũng có thể nói là MAX_LEN-10 tới thời điểm này vẫn chưa có kiểu là int!
Sau khi xong bước này, compiler mới quyết định kiểu cho 246 (cũng tức là MAX_LEN-1): lúc này thì compiler lại xem xét tới vấn đề ngữ cảnh.

choc_ wrote:
Thì tại chuẩn (với lại tại hai khứa K&R)...
Chứ nó sẽ không như bạn nghĩ...
Vậy thôi, dừng tranh luận vấn đề này nha, mình chán rồi. Bạn không chịu đọc những gì mình viết và tài liệu mình gửi lên đây. 

Post xong bài trước mới thấy bài này.
Tôi thì lại nghĩ mục đích của bạn tạo topic này lại là vì để "thảo luận" về các vấn đề này đấy chứ?

Vì nếu...cái gì cũng y khuông như mình nghĩ thì làm gì có lỗi smilie Bởi vì có những cái trên thực tế "có thể" nó không như vậy (đang tìm 1 mechanism để kiểm chứng) nên nó mới có thể có những lỗi mà "nhìn vậy, nghĩ vậy chứ không phải vậy".
Không phải mục đích của topic bạn lập ra là thế sao? smilie

choc_ wrote:
Nếu mình tính được c, thì người viết compiler cũng sẽ tính được c, vậy thì tội dại gì phải sinh mã trung gian (nhất là khi vế phải chỉ là một integer constant expression)? Đây chỉ là một bước tối ưu mã rất bình thường mà bất kỳ ai viết compiler cũng phải nghĩ đến. 

Để kiểm chứng cách compiler xử lý 1 integer constant expression, tôi đã cố tình dùng -O0 để tắt optimization đi. Vấn đề/mục đích chính ở đây là kiểm chứng chứ không phải là vấn đề compiler có biết tối ưu hay không (nếu không tôi đã không cố tình dùng -O0). Nhưng có lẽ -O0 vẫn không "ngăn cản" được bước tối ưu này.

choc_ wrote:
@nbthanh: mình không rõ bạn không hiểu thật hay vì lý do gì đó mà cố tình không hiểu. Việc tại sao compiler ra được giá trị -10, và ghi thẳng vào vùng nhớ của biến c thì mình đã giải thích ở trên rồi. Mình giải thích cách compiler sẽ phải làm từng bước, khi muốn xác định kiểu của biểu thức MAX_LEN - 10, nhưng không có nghĩa là compiler bắt buộc phải sinh mã cho từng bước đó.  

Ở đây, vì mục đích chính là kiểm chứng nên đầu tiên tôi đã thử tắt optimization đi để xem các bước trung gian compiler sinh mã thế nào. Nhưng như kết quả thực tế thì không có mã trung gian mà chỉ có kết quả cuối cùng.

Vậy có kết quả cuối cùng (gọ là Z), và ta có 1 số luập luận: "tính tay" dựa theo lập luận ra kết quả (Z'). So sánh Z với Z' ta sẽ biết được là lập luận của ta đúng hay sai.
Tuy nhiên, vì không có bước trung gian do compiler sinh ra, ta có 2 lập luận:

(1) c = (char)((int)256 - (int)10) (= kết quả cuối cùng là Z')
(2) và c = (char)256 - (char)10 (= kết quả cuối cùng là Z'')

"Chẳng may" ở đây Z' = Z'' chúng ta không có các bước trung gian (mà chúng ta expect là compiler sẽ sinh ra).

Vậy, nếu với mục đích là kiểm chứng, thì nó là (1) hay (2)?

nbthanh wrote:
Tuy nhiên ở đây compiler lại không sinh ra lệnh nào cho phép tính 256-10 mà asm code ra thằng luôn: movb $-10, -5(%ebp). Như vậy thì luận chứng của bạn choc_ chưa thể kiểm chứng được (tôi không nói là sai nhé). 

Nói rõ thêm điểm này 1 chút: làm sao để kiểm chứng được là với câu lệnh:
c = MAX_LEN - 10; (c = 256-10) thì compiler sẽ thực hiện:
c = (char)((int)256 - (int)10)
hay là c = (char)256 - (char)10
 
Go to Page:  First Page Page 2 4 5 6 Page 7 Last Page

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|